2010-10-01 1 views
0

У меня есть форма, которая позволяет загружать файлы, и я использую проверку данных, чтобы проверить, какой тип файла это и что все в порядке. То, что я хочу сделать, это разрешить им редактировать эту же запись, но загрузка файла в это время не требуется.Проверка загрузки файлов только на запись create, not edit

Мое правило проверки заключается в следующем:

'header_pic' => array(
     'extension' => array(
      'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')), 
      'message' => 'You must supply a GIF, PNG, or JPG file.', 
     ) 
    ) 

Но это правило требует файл. Я нашел параметр «on», и я мог бы добавить его к этому правилу, но тогда он будет проверять только файлы при создании. Не на редактирование.

Я попытался это, но он не работает:

'header_pic' => array(
     'extension' => array(
      'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')), 
      'required' => false, 
      'allowEmpty' => true, 
      'message' => 'You must supply a GIF, PNG, or JPG file.', 
     ), 
     'notEmpty' => array(
      'rule' => array('notEmpty'), 
      'on' => 'create', 
      'message' => 'You must supply a file.', 
     ), 
    ) 

Что мне не хватает? (Спасибо заранее!)

ответ

0

Я понял. (Спасибо omabena и RSK за их предложения.) Я понял, что я могу просто настроить два правила проверки и использовать их для добавления и один для создания. Работает довольно чисто.

'header_pic' => array(
     'extension' => array(
      'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')), 
      'message' => 'You must supply a GIF, PNG, or JPG file.', 
      'required' => false, 
      'on' => 'add' 
     ), 
     'extension2' => array(
      'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')), 
      'message' => 'You must supply a GIF, PNG, or JPG file.', 
      'required' => true, 
      'on' => 'create' 
     ), 
    ) 
0

У меня была такая же проблема, мое решение это не очень хорошо, но это сработало для меня, что я сделал, чтобы позволитьEmpty => true. и в функции редактирования на контроллере я передал данные этого изображения в массив $ this-> data, что-то вроде этого, поэтому, когда вы переходите к форме, у вас уже есть поле «изображение» с некоторыми данными и вам не нужно снова загружать изображение или изменять его.

Если это не ясно, просто скажите мне, и я постараюсь сломать его.

Я надеюсь, что это работает для вас

function admin_edit($id = null) { 
     if (!$id && empty($this->data)) { 
       $this->Session->setFlash(__('Invalid category', true)); 
       $this->redirect(array('action' => 'index')); 
     } 
     if (!empty($this->data)) { 

      if(!empty($this->data['Category']['image']['name'])) 
      { 
       $image_name = $this->Picture->upload_image_and_thumbnail($this->data,"image",570,70,"categories",true,"Category"); 
       $this->data['Category']['image'] = $image_name; 
      } 
      else{ 
       $image_name = $this->Category->find('first',array(
        'conditions'=> array(
         'Category.id' => $this->data['Category']['id'] 
        ), 
        'fields' => array(
         'Category.image' 
        ) 
       )); 
       $this->data['Category']['image'] = $image_name['Category']['image']; 
      } 


       if ($this->Category->save($this->data)) { 
         $this->Session->setFlash(__('The category has been saved', true)); 
         $this->redirect(array('action' => 'index')); 
       } else { 

         $this->Session->setFlash(__('The category could not be saved. Please, try again.', true)); 
       } 
     } 
     if (empty($this->data)) { 
       $this->data = $this->Category->read(null, $id); 
     } 

} 
0
var $validate = array(
     'imageupload' => array(
      'checksizeedit' => array(
       'rule' => array('checkSize',false), 
       'message' => 'Invalid File size', 
       'on' => 'update' 
      ), 
      'checktypeedit' =>array(
       'rule' => array('checkType',false), 
       'message' => 'Invalid File type', 
       'on' => 'update' 
      ), 
      'checkuploadedit' =>array(
       'rule' => array('checkUpload', false), 
       'message' => 'Invalid file', 
       'on' => 'update' 
      ), 
      'checksize' => array(
       'rule' => array('checkSize',true), 
       'message' => 'Invalid File size', 
       'on' => 'create' 
      ), 
      'checktype' =>array(
       'rule' => array('checkType',true), 
       'message' => 'Invalid File type', 
       'on' => 'create' 
      ), 
      'checkupload' =>array(
       'rule' => array('checkUpload', true), 
       'message' => 'Invalid file', 
       'on' => 'create' 
      ), 
     ) 
    ); 






function checkUpload($data, $required = false){ 
     $data = array_shift($data); 
     if(!$required && $data['error'] == 4){ 
      return true; 
     } 
     //debug($data); 
     if($required && $data['error'] !== 0){ 
      return false; 
     } 
     if($data['size'] == 0){ 
      return false; 
     } 
     return true; 

     //if($required and $data) 
    } 

    function checkType($data, $required = false,$allowedMime = null){ 
     $data = array_shift($data); 
     if(!$required && $data['error'] == 4){ 
      return true; 
     } 
     if(empty($allowedMime)){ 
      $allowedMime = array('image/gif','image/jpeg','image/pjpeg','image/png'); 
     } 

     if(!in_array($data['type'], $allowedMime)){ 
      return false; 
     } 
     return true; 
    } 

    function checkSize($data, $required = false){ 
     $data = array_shift($data); 
     if(!$required && $data['error'] == 4){ 
      return true; 
     } 
     if($data['size'] == 0||$data['size']/1024 > 2050){ 
      return false; 
     } 
     return true; 
    } 

Я использовал это для того же и я успешно попробовать. И сделайте изменения, если вам нужно. все лучшее