Validation de téléchargement de fichiers uniquement sur l'enregistrement Créer, et non modifier

StackOverflow https://stackoverflow.com/questions/3842591

  •  27-09-2019
  •  | 
  •  

Question

J'ai un formulaire qui permet un téléchargement de fichiers et j'utilise la validation des données pour vérifier quel type de fichier il s'agit et tout est bon. Ce que je veux faire, c'est alors leur permettre de modifier ce même enregistrement, mais un téléchargement de fichiers à ce moment n'est pas nécessaire.

Ma règle de validation est la suivante:

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

Mais cette règle nécessite un fichier. J'ai trouvé le paramètre 'ON' et je pouvais l'ajouter à cette règle, mais il ne vérifierait alors que les fichiers sur la création. Pas sur l'édition.

J'ai essayé cela mais cela n'a pas fonctionné:

   '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.',
        ),
    )

Qu'est-ce que je rate? (Merci d'avance!!)

Était-ce utile?

La solution 2

Je l'ai compris. (Merci à Omabena et RSK pour leurs suggestions.) J'ai compris que je pouvais simplement mettre en place deux règles de vérification et en utiliser une pour l'ajout et une pour la création. Fonctionne assez proprement.

   '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'
        ),
    )

Autres conseils

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;
    }

J'ai utilisé cela pour la même chose et j'ai réussi à essayer. Et effectuez les modifications si vous avez besoin. Tout de meilleur

J'ai eu le même problème, ma solution Ce n'est pas vraiment bon mais cela a fonctionné pour moi, ce que j'ai fait, c'est, pour permettre dempty => true. Et dans la fonction d'édition sur Controller, j'ai transmis les données de cette image, au tableau de données $ this Vous n'avez plus à télécharger l'image ou à la modifier.

Si ce n'est pas clair, dites-moi et j'essaierai de le décomposer.

J'espère que ça marche pour toi

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);
        }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top