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



我正在尝试使用beforeActionbehavior动态更改控制器方法中的$id参数。 仅供参考,我将使用 HashId,并且需要在我有$_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

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

你应该实现一个从yiibaseBehavior扩展的类,如下所示

<?php
namespace backendmodels;
use Yii;
use yiibaseBehavior;
use yiiwebController;
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' => backendmodelsTransformer::className(), //Modify the path to your real behavior class.
'id' => Yii::$app->request->get('id'),
],
];
}

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

最新更新