2010-07-11 2 views
1

Je suis un 3+ ans dans cakephp et face à un problème quelque peu étrange avec la soumission d'un formulaire pour actionner le contrôleur plugin (j'utilise plugin première fois). Après avoir essayé différentes choses connues, je poste celui-ci.Cakephp - Avoir un problème lors de la soumission du formulaire à l'action du contrôleur plugin

tout droit sur la question est ici la forme à mon avis « forum » « index » de la search_controller.php du plugin:

echo $form->create("Search", array('url'=>array('controller' => 
'search', 'action' => 'index','plugin'=>'forum'), 
'id'=>'searchFormMain')); 
<input type="text" name="data[Search][keyword]" style="width:357px; margin-left:9px;"><p><span id="searchButton"><input 
type="image" src="/img/button_search.jpg" style="height:40px;width: 
136px;border:0;" class="handcursor"></span></p> 
</form> 

Comme je soumets ce formulaire à l'action « index » du contrôleur de recherche de plugin forum, le code suivant ne fait rien d'impression:

public function index($type='') { 
    if(!empty($this->data)) { 
     pr($this->data); 
     die; 
    } 
} 

Alors que si je tente le même code dans beforeFilter du même contrôleur -à-dire search_controller.php il fonctionne bien et imprime en suit:

Array 
(
    [Search] => Array 
     (
      [keyword] => Hello Forum 
     ) 

) 

Et enfin voici le code beforeFilter (de search_controller.php):

public function beforeFilter() { 
    parent::beforeFilter(); 
    if(!empty($this->data)) { 
     pr($this->data); 
    } 
} 

Fyi, peu importe si je en commentaire "parent :: beforeFilter();" ou même désactiver $ utilisations de mon contrôleur (si elles semblent douteuses à vous) le résultat est même à savoir le contrôle ne va pas dans "index" action dans le cas de soumettre le formulaire tout fonctionne bien dans le cas de la page appel. L'URL/action à la page est http://localhost.rfdf.org/forum/search/index. Si j'appelle l'url directement il charge le formulaire bien mais quand je le soumets, il n'obtient jamais dans l'action «d'index» du contrôleur ainsi aucune vue rendue .

Si je tente le même ensemble de code de l'environnement plugin « forum », à savoir dans l'application normale, il fonctionne très bien

J'ai essayé de trouver un moyen de sortir de cette situation pour derniers 3+ heures maintenant, mais Sans succès. J'apprécierais toute aide pour résoudre ce puzzle.

Répondre

1

Je l'ai eu, enfin!

Il s'agissait d'un composant Securty abandonnant la requête dans le blackHole chaque fois qu'il ne trouvait pas un jeton de sécurité avec les données de formulaire. J'ai appris que le composant "Sécurité" "interfère" avec la méthode $ form-> create() et place un jeton comme un champ caché à chaque appel $ form-> create().Sur le formulaire submit, juste après beforeFilter et juste avant d'entrer dans le contrôleur "action" il vérifie pour ce jeton et meurt simplement tout sur un échec de validation. Malheureusement, il n'y a pas de message d'erreur ou d'entrée dans le journal des gâteaux.

Dans mon cas, j'avais créé mon propre tag personnalisé et non pas avec l'aide de la méthode $ form-> create, donc aucun jeton n'était généré qui conduisait à toute la douleur.

Je résolus en plaçant

$this->Security->validatePost = false; 

à la fin de beforeFilter.

Merci à tous!

0

Avez-vous essayé de mettre un autre dans ce if(!empty($this->data)) et de faire un pr() car il se pourrait que votre message ne soit pas vide.

Soit cela ou le format de votre tableau d'URL n'est pas correct.

De ln759, http://api.cakephp.org/view_source/router/#line-757

$defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index'); 

Je suppose que vous devez avoir le premier?

+0

Ceci est mon code beforeFilter: fonction publique beforeFilter() {\t \t \t \t parent :: beforeFilter(); \t \t $ this-> Auth-> allowedActions = array ("*"); \t \t if (! (Vide $ this-> data)) {\t \t \t \t pr ($ this-> params); \t \t}} \t Et voici au sommet de mon de "index" l'action: (! Empty ($ this-> data)) \t \t si { \t \t \t pr ($ this-> data) ; \t \t} {\t autre \t \t \t \t print ("vide"); \t \t En cas de soumission de formulaire, à l'intérieur du "index", il n'est pas en train d'imprimer $ this-> data ni "Empty". Il ne va tout simplement pas dans l'action "index" en cas de soumission de forum. S'il vous plaît vérifier la sortie pour $ this-> params imprimé à l'intérieur de beoforeFilter dans le prochain commentaire pour tout problème d'URL. –

+0

Tableau ( [passe] => Array() [nom] => Array() [plug-in] => forum [contrôleur] => Recherche [action] => index [url] => array ( \t \t \t [ext] => html \t \t \t [url] => Forum/Recherche/index \t \t \t) [forme] => Array() [data] => Array ( \t \t \t \t [Recherche] => Array ( \t \t \t \t \t \t \t [mot clé] => Bonjour Forum \t \t \t \t \t \t \t [avancé] => 0 \t \t \t \t \t \t \t) \t \t \t \t [Topic] => Array ( \t \t \t \t \t \t \t [pouvoir] => 0 \t \t \t \t \t \t \t [category] => \t \t \t \t \t \t \t [title] => \t \t \t \t \t \t \t [auther] = > \t \t \t \t \t \t \t [sortby] => pertinence \t \t \t \t \t \t \t [results_per_page] => 10 \t \t \t \t \t \t \t) \t \t \t) ) –

0

Utilisez-vous un ACL ou un élément similaire? Dans le beforeFilter, faites un pr de la requête. Voir quelle action est demandée pour s'assurer que la demande est correcte