2017-06-26 4 views
1

Aujourd'hui, j'ai trouvé un comportement totalement étrange et je voudrais l'arrêter.CakePhp2 Formulaire de recherche bascule d'un message à l'autre, lors de la recherche de la clé primaire

J'utilise CakePhp 2.9 et j'ai un formulaire de recherche, avec lequel je veux rechercher des commandes. Ma clé primaire dans le modèle est la session_id en raison des relations avec d'autres modèles.

class Order extends AppModel 
{  
    public $primaryKey = 'session_id'; 

-je ouvrir mon formulaire de recherche avec

<?php echo $this->Form->create(
     'Order', 
     array(
      'url' => array('controller' => 'orders', 'action' => 'search') 
     ) 
    ); ?> 

Quels sont les résultats dans le code HTML suivant:

<form id="OrderSearchForm" action="/orders/search" method="post" accept-charset="utf-8"> 

Dans le contrôleur, je fais des choses différentes en fonction de l'être à la demande du poste de type ou pas. Pour le débogage du comportement bizarre j'ai ajouté les lignes de débogage suivantes dans le contrôleur:

if ($this->request->is('post')) { 
     debug('post'); 
    } else if ($this->request->is('get')) { 
     debug('get'); 
    } else { 
     debug($_REQUEST); 
     debug($_GET); 
     debug($_POST); 
    } 

Donc, tant que je recherche d'autres valeurs que le id_session de ma commande ou combinons les id_session avec d'autres recherche des valeurs tout va bien. Mais dès que je cherche seulement pour le session_id le code HTML généré pour le formulaire de recherche est changé en

<form id="OrderSearchForm" action="/orders/search/mysearchvaluesessionidstring" method="post" accept-charset="utf-8"> 

Et quand je puis soumettre ma forme, il est soudainement plus considéré comme « post ». La sortie de débogage pour $ _GET est toujours vide et celle de $ _POST toujours remplie, mais la condition if ($ this-> request-> est ('post')) n'est plus déclenchée.

Comment puis-je changer ce comportement?

Répondre

1

Il est possible que le gâteau modifie le type de demande à PUT lorsque les données de la demande contiennent uniquement l'ID de session. Vous pouvez contourner cela en vérifiant if ($this->request->is(array('post', 'put'))) au lieu de simplement vérifier les demandes POST.

Vous pouvez en savoir plus sur les raisons de cette situation here