Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “添加”按钮以在发送到“查看”页面之前执行操作_Php_Gridview_Yii2 - Fatal编程技术网

Php “添加”按钮以在发送到“查看”页面之前执行操作

Php “添加”按钮以在发送到“查看”页面之前执行操作,php,gridview,yii2,Php,Gridview,Yii2,我正在开发一个程序,它是使用Yii2.0为实验室系统提供的预订服务。我已经使用Yii有一段时间了,但出于某种原因,这一个让我感到困惑 我在gridview中列出了所有系统,我希望在action列中有一个按钮,该按钮将运行'reserve'操作,然后显示单个系统的视图 我添加了按钮,它将用户带到查看页面,但我不知道我需要做什么才能让它首先运行保留操作…或者是否可能。我试着将其指向控制器中的reserve操作,但这当然会查找一个视图页,而不是一个操作 以下是我在浏览了许多页面的建议后一直在尝试的代码

我正在开发一个程序,它是使用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 change
return$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]);