Bonjour,

Je suis entraine de développer mon site sur cakephp 3
Je veux que les utilisateur puis télécharger leurs avatar. Je ne veux pas qui télécharge n'importequelle fichier. J'ai trouver ce plugin :
https://github.com/Xety/Cake3-Upload

Dans mon model UsersTable j'ai cette règle de validation

public function validationDefault(Validator $validator)
    {
          $validator
            ->requirePresence('avatar', 'create')
            ->allowEmpty('avatar')
            ->add('avatar',[
                'rule' => ['mimeType',['image/jpeg', 'image/png']],
            ]);

        return $validator;
    }

Le problème est que cette règle de validation est ignoréé et la savegarde ce fait même si l'extention du fichier n'est pas valide.

Ce la documentation de ce plugin il faut faire ceci :

Dans ma vue edit :

<?= $this->Form->input('avatar_file', ['type' => 'file']) ?>

et dans la mon entity Users :

protected $_accessible = [
       'avatar_file'           => true
    ];

Quand je inicialise le plugin dans mon UsersTable :

$this->addBehavior('Xety/Cake3Upload.Upload',[
            'fields' => [
                'avatar' => [
                    'path' => 'uploads/avatar/:id/:md5',
                    'overwrite' => false
                ]
            ]
        ]);

Ce qui veux dire que j"ai un champ avatar dans ma basse de donée.

Merci de votre aide.

4 réponses


antograssiot
Réponse acceptée

Il te manque un tableau imbriqué et ton champ s'appelle avatar_file donc Je dirai que ta règle devrait ressembler à ceci :

->add('avatar_file', [
        'mimeType' => [
            'rule' => ['mimeType', ['image/jpeg', 'image/png']],
            'message' => __("The mimeType is not allowed."),
        ],
])

As tu des tests qui prouvent que les deux premières règles fonctionnent aussi (avec le champ avatar au lieu de avatar_file ?

Tu peux ajouter accept="image/*" à ton input file :)

lakamark
Auteur

@Bowser65 : J'utilise HTML5 <form artribut> n'est pas supporter
http://www.w3schools.com/tags/att_form_accept.asp

lakamark
Auteur

@antograssiot
Merci