表单 – CakePHP 2.0确定哪个提交按钮已被点击

在Cake PHP 1.3中,您可以创建一个包含多个提交按钮的表单:
echo $this->Form->submit('Submit 1',array('name'=>'submit');
echo $this->Form->submit('Submit 2',array('name'=>'submit');

并检测控制器中的哪个提交按钮被按下:

if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") {
  // first button clicked
}

在CakePHP中,$this-> params [‘form’]未设置,并且点击的按钮值不会显示在$this->请求中的任何位置,$this-> request->数据,$this- > params,$this-> data或$_POST.

如何确定在CakePHP 2.0中点击了哪个按钮?

提前致谢.

编辑:

根据要求,以下是窗体的代码

<?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','name'=>'submit')); 
?>
</div>
<?PHP echo $this->Form->end()?>

输出形式:

<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>

解决方法

通常,对于两个提交按钮使用相同的名称是不好的做法.
在$_POST和$this-> request->数据中应该有一个“提交”键

我在CakePHP 2.1.1中进行了测试,如下所示:

视图代码

<?PHP echo $this->Form->create('Message',array('action'=>'test')); 
//  Extra test input field
echo $this->Form->input('test');
?>

<div class='submit'>
<?PHP 
echo $this->Form->submit('Yes','name'=>'submit')); 
?>
</div>
<?PHP echo $this->Form->end()?>

在$this-> request->数据中的控制器中:

array(
    'submit' => 'Yes','Message' => array(
        'test' => 'TestFieldTest'
    )
)

而在$_POST:

array(
    '_method' => 'POST','data' => array(
        'Message' => array(
            'test' => 'TestFieldTest'
        )
    ),'submit' => 'Yes'
)

你也可以给两个不同的名字提交:

echo $this->Form->submit('Yes','name'=>'submitY')); 
echo $this->Form->submit('No','name'=>'submitN'));

这样,您可以在$_POST或$this-> request->数据中区分它们,因为这些键将是提交的名称

array(
    'submitY' => 'Yes','Message' => array(
        'test' => 'foo'
    )
)

array(
    '_method' => 'POST','data' => array(
        'Message' => array(
            'test' => 'Bar'
        )
    ),'submitY' => 'Yes'
)

然后确定按下哪个按钮,您可以使用简单的isset($_ POST [”])或$this-> request->数据?

相关文章

操作步骤 1、进入elasticsearch的plugin,进入ik。进入config。 2、在config下面建立以.dic为后缀的字典...
lengend data数据中若存在&#39;&#39;,则表示换行,用&#39;&#39;切割。
代码实现 option = { backgroundColor: &amp;#39;#080b30&amp;#39;, tooltip: { trigger: &...
问题原因 原因在于直接在js中取的变量并复制给var变量。 于是就变成这样。 解决办法 var data = &#...
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选...
对于很多人来说,用字符编码都是熟能生巧,而不清楚为什么是那样的字符编码,所以我在这列了一个表,翻...