**什么是同一表格上2个按钮的解决方案,在cakephp中只有1个动作? **
i have following code,1 form contain 2 buttons print & ship,if i click print button,page is redirected on printorder page but problem is , if i click ship button it is not working & page is redirected on printorder.
==========================================================================
<?php // in index.ctp file
echo $this->Form->create('User',array('action'=>'orders','type' =>'post'));
echo $this->Form->submit('Ship',array('name'=>'user','value'=>'Ship','id'=>'1'));
echo $this->Form->submit('Print',array('name'=>'user','value'=>'Print','id'=>'2'));
echo $this->Form->end();
?>
<?php // in UserController
public function orders()
{
if($this->params->data['form']['user'] = "Print" )
{
$this->redirect(array('action'=>'printorder'));
}
if($this->params->data['form']['user'] = "Ship")
{
$this->redirect(array('action'=>'shiporder'));
}
}
?>
答案 0 :(得分:0)
这是因为您创建了一个表单,并且您在“USER”表单上提交了2个不同的值。
所以它会重定向,因为表单的操作很常见。
要避免它。使用2种不同形式是最佳方式。
另一种方法是使用javascript,但我建议使用2种不同的形式。
答案 1 :(得分:0)
two submit buttons情况的典型解决方案是创建一个提交按钮(默认操作)和一个常规按钮来处理另一个操作。您可以使用JavaScript来实现第二个按钮的行为,例如设置包含实际“动作”字符串的隐藏字段的值:
echo $this->Form->create('User',array('action'=>'orders','type' =>'post'));
echo $this->Form->hidden('submit_action', array(id='submit_action')); ?>
echo $this->Form->submit('Ship',array('value'=>'Ship','id'=>'ship_button'));
echo $this->Form->button('Print',array('value'=>'Print','id'=>'print_button'));
echo $this->Form->end();
和js:
<script>
var form = <get your form here>
var print_button = document.getElementById('print_button');
print_button.onclick = function() {
// Set value of print button to the #submit_action hidden field
document.getElementById('submit_action').value = print_button.value;
// Submit the form
form.submit();
}
</script>
答案 2 :(得分:0)
我跟踪了来自Two submit buttons in one form的最高投票(未选择的解决方案),其中建议对每个提交按钮应用不同的值,并在提交时检查这些值。
然而,CakePHP并不容易使用这种技术,因为尽管在'value'
$options
数组$this->Form->submit
中设置了'name'
,但在生成的元素上没有设置任何值。因此,我遵循了here中的建议,并使用了 $this->Form->submit('Submit 1', array('name' => 'action1'));
$this->Form->submit('Submit 2', array('name' => 'anotherAction'));
值键。
<强> view.ctp 强>
if (array_key_exists('action1', $this->request->data)) {
/** setup any data you want to retain after redirect
* in Session, Model, or add to redirect URL below
*/
// redirect to another action
$this->redirect(array('action' => 'myOtherAction'));
} else if (array_key_exists('anotherAction', $this->request->data)) {
// do something with anotherAction submit
}
<强> Controller.php这样强>
{{1}}