Ric*_*ome 9 forms cakephp cakephp-2.0
在CakePHP 1.3中,您可以创建一个包含多个提交按钮的表单:
echo $this->Form->submit('Submit 1', array('name'=>'submit');
echo $this->Form->submit('Submit 2', array('name'=>'submit');
Run Code Online (Sandbox Code Playgroud)
并检测控制器中按下了哪个提交按钮:
if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") {
// first button clicked
}
Run Code Online (Sandbox Code Playgroud)
在CakePHP中,没有设置$ this-> params ['form'],点击的按钮值不会出现在$ this-> request,$ this-> request-> data,$ 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', array('div'=>false, 'name'=>'submit'));
?>
</div>
<?php echo $this->Form->end()?>
Run Code Online (Sandbox Code Playgroud)
并输出表格:
<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>
Run Code Online (Sandbox Code Playgroud)
Bor*_*bev 19
通常,对两个提交按钮使用相同的名称是不好的做法.$ _POST和$ this-> request->数据中应该有一个"submit"键
我在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', array('div'=>false, 'name'=>'submit'));
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit'));
?>
</div>
<?php echo $this->Form->end()?>
Run Code Online (Sandbox Code Playgroud)
$ this-> request-> data中的控制器:
array(
'submit' => 'Yes',
'Message' => array(
'test' => 'TestFieldTest'
)
)
Run Code Online (Sandbox Code Playgroud)
在$ _POST中:
array(
'_method' => 'POST',
'data' => array(
'Message' => array(
'test' => 'TestFieldTest'
)
),
'submit' => 'Yes'
)
Run Code Online (Sandbox Code Playgroud)
您还可以为这两个提交不同的名称:
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submitY'));
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submitN'));
Run Code Online (Sandbox Code Playgroud)
这样你可以在$ _POST或$ this-> request-> data中区别它们,因为键将是提交的名称:
array(
'submitY' => 'Yes',
'Message' => array(
'test' => 'foo'
)
)
array(
'_method' => 'POST',
'data' => array(
'Message' => array(
'test' => 'Bar'
)
),
'submitY' => 'Yes'
)
Run Code Online (Sandbox Code Playgroud)
然后要确定按下哪个按钮,您可以使用简单的isset($ _ POST [''])或$ this-> request-> data?
不要对两个提交按钮使用相同的名称.考虑这个例子:
<?php echo $this->Form->create(false); ?>
<?php echo $this->Form->text('input'); ?>
<?php echo $this->Form->submit('Yes', array('name' => 'submit1')); ?>
<?php echo $this->Form->submit('No', array('name' => 'submit2')); ?>
<?php echo $this->Form->end(); ?>
Run Code Online (Sandbox Code Playgroud)
单击"是"按钮时,debug($ this-> request-> data)将产生以下内容:
array(
'submit1' => 'Yes',
'input' => 'test'
)
Run Code Online (Sandbox Code Playgroud)
在这里点击"否"按钮时:
array(
'submit2' => 'No',
'input' => 'test'
)
Run Code Online (Sandbox Code Playgroud)
要检查单击了哪个按钮:
if (isset($this->request->data['submit1'])) {
// yes button was clicked
} else if (isset($this->request->data['submit2'])) {
// no button was clicked
}
Run Code Online (Sandbox Code Playgroud)
在 2.0 中,不再有$this->params['form']所有表单助手发布的字段都以$this->data(无论如何这更有意义)
所以
if (!empty($this->data['submit']) && $this->data['submit'] == "Submit 1") {}
Run Code Online (Sandbox Code Playgroud)
请注意,!empty() 在这里也更好。
PS:您可以使用我的增强升级 shell 在您的代码中替换它: https: //github.com/dereuromark/upgrade
它的命令
cake Upgrade.Upgrade request
Run Code Online (Sandbox Code Playgroud)
(https://github.com/dereuromark/upgrade/blob/master/Console/Command/UpgradeShell.php#L833)
| 归档时间: |
|
| 查看次数: |
15657 次 |
| 最近记录: |