Php Yii2表单中的附加按钮提交表单,而不是调用其操作

Php Yii2表单中的附加按钮提交表单,而不是调用其操作,php,forms,yii,yii2,Php,Forms,Yii,Yii2,我有一个典型的Yii2表单,用于使用典型的提交按钮更新我的模型。在它旁边,我有一个“删除照片”按钮,如果有任何照片要删除,它就会出现。该视图如下所示: <?= Html::submitButton('Save changes', ['class' => 'btn btn-primary', 'name' => 'edit-button']) ?> <?php $image = isset($page->photo) ? $page->photo->

我有一个典型的Yii2表单,用于使用典型的提交按钮更新我的模型。在它旁边,我有一个“删除照片”按钮,如果有任何照片要删除,它就会出现。该视图如下所示:

<?= Html::submitButton('Save changes', ['class' => 'btn btn-primary', 'name' => 'edit-button']) ?>

<?php $image = isset($page->photo) ? $page->photo->getImageUrl() : null; ?>

<?php if (isset($image)): ?>

    <?= Html::a('Delete photo', ['delete-image', 'lab' => $lab->id, 'kind' => $page->kind], [
        'class' => 'btn btn-danger',
        'data' => [
            'confirm' => 'Do you really want to delete this photo?',
            'method' => 'post'
        ],
    ]) ?>

<?php endif; ?>

当有一张照片附在这个模型上,并且这两个按钮相邻出现时,我必须在第二个按钮代码中注释掉
'method'=>'post'
部分。因为,如果我不这样做,第二个按钮是。。。提交表单(与第一个表单一样),而不是调用
lab/delete image
route

这是我不明白的第一件事。整个代码要么由Gii生成,要么从一些Yii教程复制粘贴。我的发明一点也没有,但它的工作原理很奇怪。我错过了什么


看起来,普通的
Html::a
链接(仅被Twitter引导设置为看起来像按钮,但根本不是按钮)在元素代码中包含
data method=“post”
属性时,提交表单而不是调用其操作。这是Yii2中的错误还是我遗漏了什么?

您需要将链接放在表单之外。对于从具有
数据方法
属性的元素调用操作,yii具有js函数
handleAction
,其文档说明:

此方法识别元素的
数据方法
属性。如果该属性存在,该方法将提交包含该元素的表单。如果没有包含表单,则将使用此属性值给出的方法(例如“post”、“put”)创建并提交表单

对于超链接,表单操作将采用链接的“href”属性的值

此外,如果您使用Yi2 v2.0.3或更高版本,您可以添加
数据参数
属性,该属性的值应该是数据的JSON表示形式,并且该数据将在请求中提交。例如:

 echo Html::a('Delete image', ['delete-image'], [
     'data' => [
        'confirm' => 'Do you really want to delete this photo?'
        'method' => 'post',
        'params' => [
            'lab' => $lab->id,
            'kind' => $page->kind,
        ],
    ],
]);

在这个例子中,
params
数组将由yii2内部进行json编码

我删除了这个问题的第二部分,因为这是概念误解/简单的打字错误造成的。VerbFilter应该使用
delete image
作为动作名称,而不是
delete image
作为双字动作名称。您能提供任何例子说明以其他方式提到“delete image”按钮(使用
data params
)吗?@trejder已添加example@Tonytrejder:如何使用这个请解释一下?