Bonjour,

J'ai voulu refaire le tutoriel http://www.grafikart.fr/tutoriels/cakephp/upload-file-431 sous cakephp3 mais dans le afterSave je n'ai pas accès a data avez-vous une solution ?

Merci d'avance.

4 réponses


JC_Pires
Réponse acceptée

Cake\ORM\Table::afterSave(Event $event, Entity $entity, ArrayObject $options)

debug les 3 paramètres dans ton AfterSave et n'oublie pas les use en début de fichier. Ton enregistrement sera dans $entity

Xeta
Réponse acceptée

Hello,
J'ai fait un plugin pour Cake3 qui permet de gérer l'upload de fichier, tout est expliqué sur la doc du GitHub : https://github.com/Xety/Cake3-Upload

Merci.
Autre problème après le
$image = $this->Images->patchEntity($image, $this->request->data);
je fais un debug($image)
je n'ai plus mon tableau dans img

\src\Model\Table\ImagesTable.php (line 73)
object(Cake\Event\Event) {
    data => [
        'entity' => object(App\Model\Entity\Image) {

            'new' => false,
            'accessible' => [
                'competence_id' => true,
                'projet_id' => true,
                'nom' => true,
                'img' => true,
                'projet_competence' => true
            ],
            'properties' => [
                'id' => (int) 1,
                'competence_id' => null,
                'projet_id' => (int) 3,
                'nom' => 'test3',
                'img' => ''
            ],
            'dirty' => [],
            'original' => [
                'img' => '1428691890.png'
            ],
            'virtual' => [],
            'errors' => [],
            'repository' => 'Images'

        },
        'options' => object(ArrayObject) {
            atomic => true
            associated => [
                'competences' => [],
                'projets' => []
            ]
            checkRules => true
            checkExisting => true
            _primary => true
        }
    ]
    result => null
    [protected] _name => 'Model.afterSave'
    [protected] _subject => object(App\Model\Table\ImagesTable) {

        'registryAlias' => 'Images',
        'table' => 'images',
        'alias' => 'Images',
        'entityClass' => 'App\Model\Entity\Image',
        'associations' => [
            (int) 0 => 'competences',
            (int) 1 => 'projets'
        ],
        'behaviors' => [],
        'defaultConnection' => 'default',
        'connectionName' => 'default'

    }
    [protected] _stopped => false
}

la validation dans le fichier ImageTable:

    public function validationDefault(Validator $validator)
    {
        $validator
            ->add('id', 'valid', ['rule' => 'numeric'])
            ->allowEmpty('id', 'create')
            ->requirePresence('nom', 'create')
            ->notEmpty('nom')
            ->add('img','file',[
                'rule' => ['mimeType', ['image/jpeg', 'image/png']]
            ]);

        return $validator;
    }

Merci pour ton plugin en même temps ça m'a permis de trouver l'erreur.

L'erreur venait du fait que le nom de mon input avait le même nom que le champ dans la base de données et comme il recevoir un tableau alors que dans la base de données il attend un textarea il doit supprimer le tableau par sécurité enfin je pense.