2012-05-30 1 views
0

J'utilise Cake PHP avec échafaudage. J'ai un problème avec le code qu'il génère et je veux voir s'il y a un moyen de contourner le problème si je devais finir par créer des vues personnalisées.cake php auto sélectionne les touches étrangères lors de l'édition

Disons que j'ai deux modèles Tests et Questions. Les tests peuvent avoir beaucoup de questions et une question n'a qu'un seul test. J'ai installé les associations hasMany et belongsTo.

Maintenant, la vue échafaudée que crée le gâteau pour les tests me donne un bouton en bas dans les "questions connexes" pour créer une question. Lorsque je clique sur ce bouton, j'obtiens le formulaire 'Ajouter' pour les questions, mais le bon test n'est pas automatiquement sélectionné.

Y at-il de toute façon que je peux faire en sorte que le bouton passe le test_id dans le formulaire Question et que ce remplissage automatique?

Répondre

-1

Vous devez ajouter à var $uses = array('Question','Test'); questions_controller.php

0

Je vois comment vous pensez qui pourrait fonctionner; mais Cake ne sait pas que vous voulez ce comportement hors de la boîte.

Vous devrez ajuster votre méthode Question Add ou créer un nouveau:

code Exemple:

// action: tests/view/1 (viewing test 1, and all related questions) 
// create a link containing the ID of the current test as a param 
<?php echo $this->Html->link('Add Question to Test', 
              array('controller'=>'questions', 
               'action' => 'add_question', 
               $test['Test']['id']) 
          ); 
?> 

donc - en supposant que vous avez accès à id du test actuel, vous pouvez le transmettre en tant que paramètre à votre contrôleur questions (il y a plusieurs façons de le faire).

Puis:

// view - questions/add_question/1 
<h1>Adding A Question to Test 1</h1> 
<?php 
// create your add question form 

$this->Form->input('test_id', array('type'=>'hidden', 
            'value' => $this->params['pass'][0])); 
// create a hidden field with the value of the first passed param (the test id) 

puis dans votre contrôleur, le test_id est déjà défini, donc lorsque vous enregistrez la question, il est enregistré avec le test_id

0

appropriée Si vous voulez appliquer à tous vos projets CakePHP générés en utilisant cake bake, vous pouvez apporter quelques petits changements au cœur de CakePHP pour l'activer, comme vu ici: https://github.com/srs81/cakephp/commit/7d92c8f676c79185fa6a74ab2070f240c555a2a0

Basic ally ces deux changements ajoutent l'identifiant et le nom du modèle/contrôleur référant à l'action "add", et ceci est géré dans l'action "add" où l'identifiant correct est sélectionné.

Cela ne fonctionne PAS pour les modèles HABTM, mais devrait fonctionner correctement pour tout le reste.