Salut j'ia besoin d'aide car je n'arrive pas a faire une page pour ajouter une images qui a une option qui permet de choisir une gallerie ou on doit ajouter cette image.

J'ai deux table dans ma bdd :

Galleries

id , name

Gallerie_imgs

id , img, description, gallerie_id

J'ai donc fait deux Model Table dans mon cakePHP

GalleriesTable

<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class GalleriesTable extends Table{

    public function initialize(array $config) {
        $this->hasMany('GallerieImgs');
    }

    public function validationDefault(Validator $validator) {
        $validator->requirePresence('name')
            ->notEmpty('name');

        return $validator;
    }

}

GallerieImgsTable

<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class GallerieImgsTable extends Table{

    public function initialize(array $config) {
        $this->hasOne('Galleries', [
            'foreignKey' => 'gallerie_img',
        ]);
    }

    public function validationDefault(Validator $validator) {
        $validator->requirePresence('img')
            ->requirePresence('gallerie_img')
            ->notEmpty('img')
            ->notEmpty('gallerie_id');

        return $validator;
    }

}

J'ai un controller GalleriesController qui gere l'ajout de gallerie et d'image. Pour l'ajout d'image j'ai une fonction :

public function add_image() {
        $img = $this->loadModel('GallerieImgs')->newEntity();
        if ($this->request->is('post')) {
            $img = $this->loadModel('GallerieImgs')->patchEntity($img, $this->request->data);
            die(debug($img));
            if ($this->loadModel('GallerieImgs')->save($img)) {
                $this->Flash->success("Image enregistrer");
                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error("Impossible d'ajouter l'image");
        }
        $this->set(compact('img'));
    }

et qui me redirige donc vers la vue qui contient :

<h2>Ajouter une image</h2>
<?= $this->Form->create($img); ?>
<?= $this->Form->input('img'); ?>
<?= $this->Form->input('description'); ?>
<?= $this->Form->input('gallerie_id'); ?>
<?= $this->Form->button('Ajouter'); ?>
<?= $this->Form->end(); ?>

Comment faire pour que dans ma liste j'ai tout les nom de gallerie qui existe deja merci d'avance

4 réponses


rajoute

        $this->loadModel('Galleries');
        $galleries = $this->Galleries->find('list');
        $this->set(compact('galleries'));

dans add image
si les model sont bons cakephp va automatiquement faire de $this->Form->input('gallerie_id') une liste déroulante avec tes différentes galleries.

Pourquoi est-ce que tu mets dans la validation de ta table GallerieImg gallerie_img, alors que d'après ce que tu nous montres, ce champ n'existe pas dans la table ?

J'ai résolue le probleme et effectivement je m'etait tromper sur le gallerie_img

Si ton problème est résolu, penses à mettre ton sujet comme tel.