Php “添加”按钮以在发送到“查看”页面之前执行操作
我正在开发一个程序,它是使用Yii2.0为实验室系统提供的预订服务。我已经使用Yii有一段时间了,但出于某种原因,这一个让我感到困惑 我在gridview中列出了所有系统,我希望在action列中有一个按钮,该按钮将运行'reserve'操作,然后显示单个系统的视图 我添加了按钮,它将用户带到查看页面,但我不知道我需要做什么才能让它首先运行保留操作…或者是否可能。我试着将其指向控制器中的reserve操作,但这当然会查找一个视图页,而不是一个操作 以下是我在浏览了许多页面的建议后一直在尝试的代码: 在索引页上Php “添加”按钮以在发送到“查看”页面之前执行操作,php,gridview,yii2,Php,Gridview,Yii2,我正在开发一个程序,它是使用Yii2.0为实验室系统提供的预订服务。我已经使用Yii有一段时间了,但出于某种原因,这一个让我感到困惑 我在gridview中列出了所有系统,我希望在action列中有一个按钮,该按钮将运行'reserve'操作,然后显示单个系统的视图 我添加了按钮,它将用户带到查看页面,但我不知道我需要做什么才能让它首先运行保留操作…或者是否可能。我试着将其指向控制器中的reserve操作,但这当然会查找一个视图页,而不是一个操作 以下是我在浏览了许多页面的建议后一直在尝试的代码
['class' => 'yii\grid\ActionColumn',
'template' => '{reserve}',
'buttons' => [
'reserve' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-ok-circle"></span>',
$url,
[
'title' => 'Reserve',
'data-method' => 'post',
'data-pjax' => 0,
]);
}
],
'urlCreator' => function ($action, $model, $key, $index) {
return Url::toRoute(['cml/view', 'id' => $key]);
}
如有任何建议,将不胜感激。更改
return Url::toRoute(['cml/view', 'id' => $key]);
到
在您的
urlCreator
函数中。操作就是函数。。如果在呈现视图之前需要执行函数,只需调用函数..将需要的代码放入函数中,并在需要时调用函数。您已经在锚定链接中直接调用actionReserve
,您想问什么?您遇到的错误或异常行为是什么?我也这么认为,但它正在寻找名为reserve的查看页面,而不是调用actionReserve函数。它解决了吗?主要问题是,我没有为操作正确设置访问控制。我确实不得不用Irfan建议的改变作为答案,我试着投了赞成票,但由于我的声誉太低,它似乎没有起到任何作用。感谢您的帮助和建议。当我更改urlCreator函数时,我收到一个错误,指出视图文件不存在。我希望避免为reserve函数创建视图文件。我的目标是运行actionReserve函数(它将使用当前登录用户的用户id更新fkReservedTo列),然后显示查看页面。如您所见,一旦进行了更改,我将函数重定向到系统的查看页面。基本上,我只希望该函数在单击按钮时运行,而不是直接带到查看页面。这意味着它将以其他方式阻止并调用showarter()
函数,不确定您的showarter()
实现是什么,请共享。同样在if
block changereturn$this->redirect(['view'])中代码>返回$this->重定向(['view','id'=>$id])`抱歉…我不知道如何正确地将代码放入注释中/***显示alertPage.php的操作*此页面设置为显示每种类型*的flash消息*@return alertPage*/public function showAlert(){return$This->render('alertPage');}@GregRoberge如果您试图避免调用视图,请尝试在函数末尾添加Yii::$app->end()
或return
。它不会调用视图,并且您以错误的方式使用了警报视图。您应该尝试使用yii2框架提供的警报视图。您可以将它们包括在布局中,只需添加flash消息并重定向,它将自动显示消息。我想我已经解决了这个问题。我忘了在web.php中将“reserve”操作添加到访问控制列表中。我这样做了,现在它至少进入了功能。我看到了关于没有视图的错误消息,但没有进一步查看它正在处理另一个错误的位置。另一个错误是“访问被拒绝”。谢谢你的帮助。对不起,这浪费了你的时间。
return Url::toRoute(['cml/view', 'id' => $key]);
return Url::toRoute(['cml/reserve', 'id' => $key]);