Php Yii2表单中的附加按钮提交表单,而不是调用其操作
我有一个典型的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->
<?= 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:如何使用这个请解释一下?