我尝试使用$id
和beforeAction
动态更改控制器方法中的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
(或者,也许更好的方法是创建自定义网址规则?)
答案 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')
,您将看到已转换的网址参数。