Je viens de retrouver un autre exemple à moi pour créer un "select
multiple" qui représente une HABTM :

// Dans le modèle Item :
public $hasAndBelongsToMany = array(
                        'Agregat' => array('className' => 'Agregat',
                                                'joinTable' => 'agregats_items',
                                                'foreignKey' => 'item_id',
                                                'associationForeignKey' => 
'agregat_id',
                                                'unique' => true,
                                                'conditions' => '',
                                                'fields' => '',
                                                'order' => '',
                                                'limit' => '',
                                                'offset' => '',
                                                'finderQuery' => '',
                                                'deleteQuery' => '',
                                                'insertQuery' => ''
                        )
}


// Dans le modèle Agregat :
public $hasAndBelongsToMany = array(
                        'Item' => array('className' => 'Item',
                                                'joinTable' => 'agregats_items',
                                                'foreignKey' => 'agregat_id',
                                                'associationForeignKey' => 
'item_id',
                                                'unique' => true,
                                                'conditions' => '',
                                                'fields' => '',
                                                'order' => '',
                                                'limit' => '',
                                                'offset' => '',
                                                'finderQuery' => '',
                                                'deleteQuery' => '',
                                                'insertQuery' => ''
                        )
        );

// Dans le contrôleur items_controller.php :
$agregats = $this->Item->Agregat->find('list',
array('order'=>'name'));
$this->set('agregats',$agregats);

// Dans la vue :
echo $form->input('Agregat',array('label'=>'Mon agrégat'));

Comme tu le vois, je set un mot au pluriel, mais dans la vue j'utilise
le nom du modèle lié comme nom du champ !
Mais en aucun cas je ne fais mon find() sur un modèle "AgregatItem"
qui représenterait mon HABTM...


On 11 juil, 14:47, avairet <[EMAIL PROTECTED]> wrote:
> Bonjour Dia,
>
> Quelques petites choses pour avancer, je regarderai en détail ton code
> après :
>
> 1) "quand il s'agit de vérifier la présence d'une association entre 2
> modèles liés par une relation HABTM"
>
> >>>> Je ne comprends pas : tu veux vérifier qu'il existe une association 
> >>>> entre 2 modèles ou vérifier qu'un champ de formulaire n'est pas vide ?
>
> 2) est-ce que tu as déclaré l'HABTM dans tes deux modèles ?
>
> 3) echo $form->input('GameGenre', array('label' => '<strong>* Genre :</
> strong>'));
>
> >>>>> Quand tu regardes la source HTML générée, quelle est la syntaxe de 
> >>>>> l'attribut "name" de ton input ?
>
> 4) J'ai le sentiment que tu as créé un modèle GameGenre, non ? Dans
> Cake, quand on fait une HABTM, on crée la table de liaison
> games_genres, mais on ne crée pas le modèle correspondant, seuls les
> modèles Game et Genre sont créés.
> En fait quand je regarde ton setting dans admin_add, tu as fait :
> "$this->Game->GameGenre->find()", alors que tu devrais avoir "$this-
>
> >Game->Genre->find()"
>
> Voici un exemple à moi qui marche en RC2 :http://bin.cakephp.org/view/54589606
> J'implémente des checkbox et j'ai écrit, dans ce cas précis, mes input
> sans le helper form, mais le principe est le même avec $form->input().
> Tu écriras un truc du type : $form->input('photos',array('label' =>
> __('Mes illustrations',true)));
>
> 5) Pour tester dans le Modèle si le champ est vide, tu peux faire ton !
> isset($this->data['Genre']['Genre']) ou ton !empty($this->data['Genre']
> ['Genre']) dans un beforeSave() qui retourne false avec un 
> $this->invalidFields('Genre'); Je ne suis plkus sûr de la syntaxe, mais tu
>
> la retrouveras facilement dans la CookBook.
>
> On 10 juil, 21:15, Dia <[EMAIL PROTECTED]> wrote:
>
> > salut
>
> > déjà, merci d'avoir répondu
>
> > voilà mon code (en partie) :http://bin.cakephp.org/view/2137985698
>
> > je sais bien comment fonctionne le système de validation mais pas
> > quand il s'agit de vérifier la présence d'une association entre 2
> > modèles liés par une relation HABTM
>
> > oui, je fais le isset dans le contrôleur, et oui c moche, mais je
> > comme pour ce cas précis je sais pas comment utiliser le système de
> > validation...
>
> > pour le coup du formulaire vide et du tableau, je vais décrire ce que
> > j'ai fait ça sera plus simple :
> > - aller sur le fomulaire d'ajout de Game
> > - ne rien remplir
> > - valider
> > - évidemment la page se raffiche avec les messages d'erreurs qui vont
> > bien et un var_dump de $this->data dans l'action add du contrôleur me
> > donne un truc du genre
> > array (
> > [Game] => array ( 'champ1' => string(0) ''... /* pareil pour tous les
> > champs */ )
> > ['GameGenre'] => array(1) { ['GameGenre'] => string(0) '' }
> > ['GameBackground'] => array(1) { ['GameBackground'] => string(0) '' }
> > )
>
> > j'utilise la 1.2 RC2 et je n'avais pas ce comportement avec la 1.2
> > alpha ou beta
>
> > merci d'avance pour l'aide
>
> > On 10 juil, 14:14, avairet <[EMAIL PROTECTED]> wrote:
>
> > > Bonjour Dia,
>
> > > Avec le système de validation, tu dois déclarer une variable $validate
> > > dans ton modèle Game et une autre dans GameGenre.
> > > Sur ce type là :
>
> > > public $validate = array(
> > > 'titre' => array('rule'=>array('minLength',
> > > 1),'message'=>'Obligatoire')
>
> > > }
>
> > > Là tu indiques faire un if(!isset($this->data[''GameGenre]")), mais tu
> > > fais celà dans ton contrôleur, non ?
> > > C'est possible mais cela n'est pas la meilleure solution automagique
> > > de Cake.
>
> > > Par ailleurs, tu dis "valider un formulaire vide renvoie un
> > > tableau" ??
> > > Mais pour moi, valider un formulaire vide renvoie false et un éventuel
> > > message d'erreur ?!
>
> > > Enfin, dans un formulaire qui contient une HABTM, le select multiple a
> > > pour name : data[GameGenre][GameGenre][]
> > > Donc si tu testes uniquement sur data[GameGenre], alors tu as
> > > forcément une réponse erronée.
>
> > > Pour te répondre avec précision, il faudrait qu'on puisse lire un
> > > minimum de code et que tes explications soient claires.
> > > Tu peux utiliser le bin pour nous copier-coller du code 
> > > :http://bin.cakephp.org/
>
> > > Avairet
>
> > > On 10 juil, 13:34, Dia <[EMAIL PROTECTED]> wrote:
>
> > > > salut à tous
>
> > > > je vous explique mon problème :
> > > > j'ai 2 modèles (game et gamegenre pour l'exemple) liés par une
> > > > relation HABTM
> > > > je veux que chaque entité du modèle game soit au mois lié à une entité
> > > > du modèle gamegenre
> > > > comment est ce que je peux vérifier cela avec le système de validation
> > > > de CakePHP ? (en gros, dans le formulaire /games/add, le champ multi
> > > > select qui représente gamegenre doit avoir au moins une valeur)
>
> > > > dans la branche 1.2, avant les RC, j'utilisais "if 
> > > > (!isset($this->data['GameGenre'])) { /* error */ }" dans le 
> > > > gamecontroller
>
> > > > mais depuis les RC, valider un formulaire vide renvoie "['GameGenre']
> > > > => array(1) { ['GameGenre'] => string(0) '' }"
>
> > > > => y a un moyen simple de gérer ça ?
>
> > > > merci- Masquer le texte des messages précédents -
>
> > > - Afficher le texte des messages précédents -
--~--~---------~--~----~------------~-------~--~----~

Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier  : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à