CakePHP 2.0 Déterminer quel bouton d'envoi a été cliqué
Dans CakePHP 1.3 vous pouvez créer un formulaire avec plusieurs boutons de soumission:
echo $this->Form->submit('Submit 1', array('name'=>'submit');
echo $this->Form->submit('Submit 2', array('name'=>'submit');
et de détecter les soumettre bouton a été pressé dans le contrôleur:
if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") {
//first button clicked
}
Dans CakePHP, $this->params['formulaire'] n'est pas définie et la valeur du bouton cliqué ne pas apparaître n'importe où dans $this->request, $this->request->data, $this->params, $this->données ou $_POST.
Comment puis-je déterminer quel bouton a été cliqué dans CakePHP 2.0?
Merci d'avance.
Edit:
Comme demandé, voici le code pour le formulaire:
<?php echo $this->Form->create('History', array('action'=>'add')); ?>
<div class='submit'>
<?php
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit'));
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit'));
?>
</div>
<?php echo $this->Form->end()?>
Et la sortie de la forme:
<form action="/projects/kings_recruit/trunk/www/histories/add" id="HistoryAddForm" method="post" accept-charset="utf-8">
<div style="display:none;">
<input name="_method" value="POST" type="hidden">
</div>
<div class="submit">
<input name="submit" value="Yes" type="submit">
<input name="submit" value="No" type="submit">
</div>
</form>
source d'informationauteur RichardAtHome
Vous devez vous connecter pour publier un commentaire.
Généralement c'est une mauvaise pratique d'utiliser le même nom pour les deux boutons submit.
Il devrait y avoir un "soumettre" dans les $_POST et $this->request->data
J'ai testé cette dans CakePHP 2.1.1 comme indiqué ci-dessous:
Le code de la vue:
Le dans le contrôleur dans $this->request->data:
Et dans $_POST:
Vous pouvez aussi donner les deux soumet différents noms:
De cette façon, vous pouvez différer dans le $_POST ou $this->request->les données, parce que les clés seront les soumet les noms:
Puis de déterminer quel bouton est pressé, vous pouvez utiliser un simple isset($_POST ["] ou $this->request->data ?
Ne pas utiliser le même nom pour les deux boutons submit. Considérons cet exemple:
debug($this->request->data) produira les éléments suivants lorsque le bouton "Oui" est cliqué:
Et là, c'est quand le "Non" clique sur le bouton:
Pour vérifier quel bouton a été cliqué:
en 2.0 il n'y a pas de
$this->params['form']
plustous helper form posté champs se retrouvent dans
$this->data
(qui fait plus de sens de toute façon)donc
notez que !empty() est mieux ici.
PS: vous pouvez utiliser mon améliorée de mise à niveau de shell pour le remplacer dans votre code: https://github.com/dereuromark/upgrade
ses la commande
(https://github.com/dereuromark/upgrade/blob/master/Console/Command/UpgradeShell.php#L833)