在CakePHP中点击了哪个提交按钮?

时间:2012-02-09 07:24:14

标签: cakephp-2.0

在CakePHP中点击了哪个提交按钮?

**什么是同一表格上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')); 
             }
            }


       ?> 

3 个答案:

答案 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}}