cakephp形式的多个提交按钮

时间:2014-03-09 12:37:44

标签: php jquery forms cakephp cakephp-2.3

我在cakephp视图中有一个表单,只需一个按钮即可保存,这里是视图中的代码book_form.ctp

echo $this->Form->create
(
    'Book',
    array
    (
        'url' => array
        (
            'controller' => 'Books',
            'action'     => 'save_record'
        ),
        'class'         => 'span12 the_ajaxform',
        'inputDefaults' => array
        (
            'label' => false,
            'error' => false
        )
    )
); 
.
.
// form fields
.
.
$options =array(
    'label' => __('Save'),
    'class' => 'btn btn-primary',
     'id'=>'saveform'   
 );
echo $this->Form->end($options);
.
.

这很完美!现在我想在该表单上添加两个按钮,这就是我所做的

$options =array(array(
        'label' => __('Save & Close'),
        'class' => 'btn btn-primary',
         'id'=>'saveform'   
     ),
     array(
        'label' => __('Save & Create New'),
        'class' => 'btn btn-primary',
         'id'=>'saveformnew'    
     )
     array(
        'label' => __('Cancel'),
        'class' => 'btn btn-primary',
         'id'=>'formcancel' 
     ));
    echo $this->Form->end($options);

但这只会带一个按钮甚至不提交表格,我哪里错了? 并且每个按钮可以在控制器中调用不同的方法吗? 提前致谢

5 个答案:

答案 0 :(得分:8)

如果您设置提交按钮的名称,则会将其作为发布数据中的关键字,因此您可以在操作开始时使用该信息重定向。 e.g。

<?php echo $this->Form->submit('btn1value', array('name'=>'btn1'))?>
<?php echo $this->Form->submit('btn2balue', array('name'=>'btn2'))?>

点击第一个按钮会给出如下数据的帖子数据:

array(
    [btn1] => btn1value
    [YourModel] => array(...)
)

这样可以很容易地执行以下操作:

if (isset($this->request->data['btn1'])) {
    // btn1 was clicked
} else if (isset($this->request->data['btn2'])) {
    // btn2 was clicked
}

答案 1 :(得分:5)

我不确定它是“技术上正确”,HTML4,5是否兼容等等但是我总是做到这样,到目前为止没有任何问题:

<?php echo $this->Form->submit('Delete it', array('name'=>'User[formaction]')); ?>
<?php echo $this->Form->submit('Undelete Selected', array('name'=>'User[formaction]')); ?>
<?php echo $this->Form->submit('Purge Selected', array('name'=>'User[formaction]')); ?>

其中“User”是型号名称。

答案 2 :(得分:1)

通常一个表单只能有一个操作

这个lmnitation在HTML5中不再适用,您可以在其中为每个按钮设置表单操作

所以:以下代码仅适用于HTML5浏览器

echo $this->Form->button(
    'Your Action Description Here', 
    array(
        'type' => 'submit', 
        'formaction' => 'yourActionHere' // 
    )
);

答案 3 :(得分:0)

  

试试这个,这很容易做到。

<div class="submit">
 <?php echo $this->Form->submit(__('Submit', true), array('name' => 'ok', 'div' => false)); ?>
 <a href="link_to_go"><?php   echo $this->Form->button('Cancel', array('type' => 'button'));?></a>

答案 4 :(得分:-1)

尝试使用FormHelper的按钮功能创建提交按钮和其他按钮,然后在没有任何选项的情况下调用end。这将输出按钮并为您结束表单。

请参阅:FormHelper::button

e.g:

echo $this->Form->button('Save & Close', array('type' => 'submit'));
echo $this->Form->button('Save & Create New', array('type' => 'button'));
echo $this->Form->button('Cancel', array('type' => 'reset'));