带有自定义URL的ActionColumn按钮

tre*_*der 8 php gridview yii yii2

我需要为Yii2的ActionColumn添加新的自定义按钮.使用Internet中提供的示例,我设法创建一个用于呈现自定义按钮的闭包,现在它使用默认URL进行渲染.

但是,我需要一个自定义URL.

我设法通过覆盖$url值来完成我的自定义按钮的闭包功能,并使用其他函数参数生成URL,如下所示:

'buttons' => [
    'see' => function ($url, $model, $key) {
        $options = [
            'title' => Yii::t('yii', 'See in frontend'),
            'aria-label' => Yii::t('yii', 'See'),
            'data-pjax' => '0',
        ];
        $url = \yii\helpers\Url::toRoute(['lab/index', 'lab' => $key]);

        return Html::a('<span class="glyphicon glyphicon-asterisk"></span>', $url, $options);
    }
],
Run Code Online (Sandbox Code Playgroud)

它有效,但它不太专业.我想使用urlCreator属性,如Yii论坛的Kartik示例所示:

'urlCreator' => function ($action, $model, $key, $index) {
    if ($action === 'see') {
        return \yii\helpers\Url::toRoute(['lab/index', 'lab' => $key]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这个例子不起作用.它只为我的自定义按钮生成正确的URL,并使默认按钮不起作用,没有任何URL.假设这是有效的,这是可以理解的urlCreator.但是,如何解决这个问题呢?如何访问ActionColumn使用controller属性为默认按钮生成URL或如何强制它为我生成这些URL?

vit*_*_74 8

使用那样:

'urlCreator' => function ($action, $model, $key, $index) {
                        if ($action === 'yandexCampaign') {
                            return Url::toRoute(['add-yandex-campaign', 'id' => $model->id]);
                        } else {
                            return Url::toRoute([$action, 'id' => $model->id]);
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

您需要设置else默认按钮的大小写.