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

时间:2018-01-30 21:18:57

标签: php gridview yii2

我正在开发一个程序,该程序是使用Yii2.0的实验室系统的预订服务。我已经使用过Yii一段时间了,但出于某种原因,这个让我感到难过

我在gridview中列出了所有系统,并且我希望在actionColumn中有一个按钮来运行' 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]);
        }

控制器中的功能

    public function actionReserve($id)
{
    $model = $this->findModel($id);

    if ($model->fkReservedTo == 1)
    {
        $model->fkReservedTo = Yii::$app->user->id;
        // shouldn't you call save here
        $model->save();
        return $this->redirect(['view','id'=>$id]);
    }
    else 
    {
        Yii::$app->session->setFlash('error', 'This system is not available to be reserved');
        return $this->showAlert();
    }
}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

更改

return Url::toRoute(['cml/view', 'id' => $key]);

return Url::toRoute(['cml/reserve', 'id' => $key]);

urlCreator函数中。