2013-12-18 1 views
0

Я использую cakephp uploader plugin от Miles Johnson. Мне нравится плагин, и у меня он работает, чтобы загружать фотографии для фотомодели. Проблема, с которой я столкнулся, заключается в том, что когда я пытаюсь редактировать существующую запись, вместо замены фотографии, связанной с записью, я редактирую новую запись. Новая запись содержит все ту же информацию, за исключением новой загруженной фотографии.Milesj uploader plugin создает новую запись вместо редактирования существующей записи

Вот как модель выглядит фотография:

 'Uploader.Attachment' => array(
    'imgPath' => array(
     // 'name'  => '', // Name of the function to use to format filenames 
     'baseDir' => '',     // See UploaderComponent::$baseDir 
     'uploadDir' => 'files/uploads/', // See UploaderComponent::$uploadDir 
     'dbColumn' => 'imgPath',   // The database column name to save the path to 
     'maxNameLength' => 60,    // Max file name length 
     'overwrite' => false,    // Overwrite file with same name if it exists 
     'stopSave' => true,    // Stop the model save() if upload fails 
     'allowEmpty' => true,   // Allow an empty file upload to continue 
     'transforms' => array(    // What transformations to do on images: scale, resize, etc 
      array(
       'method' => 'resize', 
       'width' => 50, 
       'height' => 50, 
       'append' => '_thumb', 
       'dbColumn' => 'imgPathThumb', 
       ) 
      )   
     ) 
    ) 

Это фото админ форма редактирования вид:

<?php echo $this->Html->script('ckeditor/ckeditor');?> 
<?php echo $this->Form->create('Photo', array('type' => 'file'));?> 
<fieldset> 
    <legend><?php echo __('Admin Edit Photo'); ?></legend> 
<?php 
    echo $this->Form->input('title'); 
    echo $this->Form->input('caption', array('class'=>'ckeditor')); 
    echo $this->Form->input('imgPath', array('type' => 'file')); 
    echo $this->Form->input('alt_tag'); 
    echo $this->Form->input('type', array('label' => 'Choose a type of photo', 'options' => array(
     'gallery'=>'gallery', 
     'news'=>'news', 
     'post'=>'post', 
     )));  
    echo $this->Form->input('active', array('label' => 'Make active', 'options' => array('yes'=>'yes','no'=>'no' ))); 
    echo $this->Form->input('gallery_id'); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 

Это контроллер админ редактировать код:

public function admin_edit($id = null) { 
    $this->layout = 'admin'; 
    if (!$this->Photo->exists($id)) { 
     throw new NotFoundException(__('Invalid photo')); 
    } 
    if ($this->request->is(array('post', 'put'))) { 
     if ($this->Photo->save($this->request->data)) { 
      $this->Session->setFlash(__('The photo has been saved.'), 'success'); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The photo could not be saved. Please, try again.'), 'error'); 
     } 
    } else { 
     $options = array('conditions' => array('Photo.' . $this->Photo->primaryKey => $id)); 
     $this->request->data = $this->Photo->find('first', $options); 
    } 
    $galleries = $this->Photo->Gallery->find('list'); 

    $this->set(compact('galleries')); 
} 

Есть Я забыл что-то очевидное?

Cheers, Пол

+0

Почтовый индекс вашего контроллера здесь. – XuDing

+0

XuDing, я добавил код редактирования контроллера выше. Thanks – Paul

+0

Ваш контроллер выглядит отлично. Вероятно, вы проигнорировали файл вида. – XuDing

ответ

2

Когда Вы редактируете запись, Вы должны установить идентификатор этой записи.

Добавить сформировать $this->Form->input('id') или установить идентификатор в контроллере до того save() действия

+0

спасибо Kicaj, я добавляю $ this-> Form-> input ('id') в форму и повторно тестирую без везения. Новая запись по-прежнему создается вместо выбранной записи с заменой файла. Любые другие мысли? – Paul

+0

спасибо Kicaj, я пересмотрел ваше предложение, и это решило его. Еще раз спасибо. – Paul