Php 如何在表单内部使用FormHelper::postLink()?

Php 如何在表单内部使用FormHelper::postLink()?,php,forms,cakephp,Php,Forms,Cakephp,我想在表单中创建一个Cakephp delete post链接,如下所示。但当我在浏览器中检查时,第一个“删除帖子”按钮不包括“删除表单”,不能删除,但其他按钮包括我想要的,可以删除 是cakephp错误还是我需要更改源代码 <?php echo $this->Form->create('Attendance', array('required' => false, 'novalidate' => true)); foreach($i = 0; $i < 1

我想在表单中创建一个Cakephp delete post链接,如下所示。但当我在浏览器中检查时,第一个“删除帖子”按钮不包括“删除表单”,不能删除,但其他按钮包括我想要的,可以删除

是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();
?>

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

如果需要现有表单内部的post链接,则必须使用
inline
block
选项(从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')
    )
);
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')
    ]
);
CakePHP 3.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')
    )
);
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

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')
    )
);
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')
    ]
);
CakePHP 3.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')
    )
);
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')
    ]
);

您知道为什么使用这种方法(将'block'=>true添加到postLinks)时会将父表单更改为get请求吗?