【问题标题】:How to use FormHelper::postLink() inside of a form?如何在表单中使用 FormHelper::postLink()?
【发布时间】:2016-01-26 04:53:18
【问题描述】:

我想在如下表单中创建一个 Cakephp 删除帖子链接。但是当我在浏览器中检查并且无法删除时,第一个删除帖子按钮不包括删除表单,但其他按钮包括我想要的并且可以删除。

是 cakephp 错误还是我需要更改源代码?

<?php
echo $this->Form->create('Attendance', array('required' => false, 'novalidate' => true));

foreach($i = 0; $i < 10; i++):
    echo $this->Form->input('someinput1', value => 'fromdb');
    echo $this->Form->input('someinput2', value => 'fromdb');
    echo $this->Form->postLink('Delete',array('action'=>'delete',$attendanceid),array('class' => 'btn btn-dark btn-sm col-md-4','confirm' => __('Are you sure you want to delete')));
endforeach;

echo $this->Form->button('Submit', array('class' => 'btn btn-success pull-right'));
echo $this->Form->end();
?>

【问题讨论】:

    标签: php forms cakephp


    【解决方案1】:

    Forms cannot be nested,HTML 标准根据定义禁止这样做。如果您尝试这样做,大多数浏览器将丢弃嵌套表单并将其内容呈现在父表单之外。

    如果您需要在现有表单中发布链接,那么您必须使用 inlineblock 选项(从 CakePHP 2.5 开始可用,inline 在 CakePHP 3.x 中已被删除),这样新的表单被设置为可以在主表单之外呈现的视图块。

    CakePHP 2.x

    echo $this->Form->postLink(
        'Delete',
        array(
            'action' => 'delete',
            $attendanceid
        ),
        array(
            'inline' => false, // there you go, disable inline rendering
            'class' => 'btn btn-dark btn-sm col-md-4',
            'confirm' => __('Are you sure you want to delete')
        )
    );
    

    CakePHP 3.x

    echo $this->Form->postLink(
        'Delete',
        [
            'action' => 'delete',
            $attendanceid
        ],
        [
            'block' => true, // disable inline form creation
            'class' => 'btn btn-dark btn-sm col-md-4',
            'confirm' => __('Are you sure you want to delete')
        ]
    );
    

    关闭主表单并输出帖子链接表单

    // ...
    
    echo $this->Form->end();
    
    // ...
    
    echo $this->fetch('postLink'); // output the post link form(s) outside of the main form
    

    另见

    CakePHP 2.x

    CakePHP 3.x

    【讨论】:

    • 你知道为什么在使用这种方法时(将'block' => true 添加到postLinks)它会将父表单更改为获取请求吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多