2010-04-08 14 views
0

Salut! Total CakePHP noob ici.

Mise à jour en bas/

C'est un peu une question deux fois. Dans une vue qui est utilisée pour ajouter des objets user, je voudrais utiliser un champ déroulant (sélection) dans le formulaire.

Chaque user appartient à un group alors quand j'ajoute un utilisateur, je veux une liste déroulante qui contient tous les groupes que l'utilisateur pourrait éventuellement rejoindre. Actuellement, le champ group_id est un champ de texte. Je sais comment le forcer à être un champ de sélection, mais je ne sais pas comment remplir la sélection avec les noms des groupes par programme.

La méthode actuelle:

echo $form->input('group_id', array(
    '1' => 'NameOfGroup1', 
    '2' => 'NameOfGroup2', 
    '3' => 'NameOfGroup3') 
    ); 

Je veux générer le tableau d'options par programmation bien.

echo $form->input('group_id', $this->Group->find('list')); 

Cela ne fonctionne pas cependant. Je reçois une erreur:

Undefined property: View::$Group [APP/views/users/add.ctp, line 8] 

Pour moi, cela signifie que je n'ai pas accès à l'objet Group à l'intérieur de mon point de vue de l'utilisateur.

Comment puis-je accomplir ceci? Encore une fois, je veux le faire par programme afin qu'il se mette à jour lorsque j'ajoute des groupes ou les supprime.

EDIT: Pourquoi cela ne fonctionne-t-il pas?

// In views/users/someaction.ctp 
echo $form->input('group_id', 
        array('options' => $this->formOptionsGroups) 
       ); 

// In controllers/users_controller.php 
function someaction() { 
    // Any other logic 
    $this->set('formOptionsGroups', $this->Group->find('list')); 
} 

L'erreur est que Group est un objet indéfini.

+0

tutoriels pertinents: http://book.cakephp.org/view/335/Create-a -Posts-Controller et http://book.cakephp.org/view/336/Creating-Post-Views – deceze

Répondre

3

Je pense qu'il est pas nécessaire d'utiliser la fonction requestAction dans votre situation.Because vous pouvez obtenir la liste des groupes dans votre contrôleur d'utilisateurs facilement puis l'assigner à votre page d'ajout d'utilisateur où vous en avez besoin.Ceci serait plus gracieux.

BTW, about requestAction à partir du livre de cuisine: requestAction est mieux utilisé en conjonction avec des éléments (en cache) - comme un moyen d'extraire des données pour un élément avant le rendu.

Par exemple,

/*code In the your user-add action of the users controller*/ 
function useradd() 
{ 
    ...... 
    //your ownstuff skipped 

    $grouplist = $this->User->Group->find('list'); 
    $this->set("grouplist",$grouplist); 
} 

Alors, selon vous, de l'action useradd:

echo $form->input('group_id', $grouplist); 
+0

Pouvez-vous fournir un exemple de code. Je n'ai pas tout à fait suivi. Merci! – Jay

+0

@ James, voir mise à jour ... – Young

0

Le problème était de savoir comment je demandais l'action dans le contrôleur.

Une implémentation correcte est:

echo $form->input('group_id', 
        array('options' => $this->requestAction(array('controller' => 'groups', 'action' => 'formSelectOptions'))) 
       ); 

Et puis dans le contrôleur de groupes:

// formSelectOptions() returns array for use with a form $options['options'] 
function formSelectOptions() { 
    return $this->Group->find('list'); 
} 
+0

Bon travail. Merci d'avoir posté la réponse. – webbiedave

+2

Faites-le dans l'autre sens, trouvez les données dans le contrôleur, puis 'set()' pour qu'il soit disponible dans la vue. 'requestAction' a beaucoup de frais généraux. – deceze