Yii2 - 如何使用行为修改控制器动作参数?

时间:2017-11-27 00:03:48

标签: yii2 behavior

我尝试使用$idbeforeAction动态更改控制器方法中的behavior参数。仅供参考,我将使用HashIds,并且需要将我可能被散列为$_GET['id']的任何地方转换为整数。

如何使用行为自动使用行为自动修改我的$ _GET [' id']?

我的控制器中的示例操作:

public function actionView($id){
    // run code to process $id here back to integer using a behavior
    echo $id; //should be an integer
}

我的示例网址:http://mydomain/posts/view?id=3QhLp

(或者,也许更好的方法是创建自定义网址规则?)

1 个答案:

答案 0 :(得分:3)

你应该实现一个从\yii\base\Behavior扩展的类

<?php

namespace backend\models;

use Yii;
use yii\base\Behavior;
use yii\web\Controller;

class Transformer extends Behavior
{
    public $id = '';

    public function events()
    {
        return [Controller::EVENT_BEFORE_ACTION => 'transform'];    //mounting the handler to the 'beforeAction' event on the controller.
    }

    public function transform()
    {
        $_GET['id'] = $this->id . "transformed";       //mock method here

        return true;
    }
}

然后在您的控制器中添加以下代码:

public function behaviors()
{
    return [
        'transformer' => [
            'class' => \backend\models\Transformer::className(), //Modify the path to your real behavior class.
            'id' => Yii::$app->request->get('id'),
        ],
    ];
}

然后访问您操作中的Yii::$app->request->get('id'),您将看到已转换的网址参数。