要传递参数以访问规则表达式 下面的代码不起作用,因为$ owner_id没有在评估表达式的类中定义。任何想法如何解决它?
public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
array('allow',
'actions'=>array('update'),
'expression'=>'$user->id==$owner_id',
));
}
答案 0 :(得分:7)
很难说出你要做什么或问题是什么,但是在构建数组时我会使用“{}”和双引号而不是单引号,以便正确解释变量:
public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
array('allow',
'actions'=>array('update'),
'expression'=>"{$user->id}=={$owner_id}",
));
}
答案 1 :(得分:2)
您可以使用
array('allow',
'actions'=>array('update'),
'users'=>array(Yii::app()->user->name),
'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))',
),
答案 2 :(得分:1)
function isPostOwner() {
$post = Post::model()->findByPk($_GET['post_id']);
$owner_id = $post->owner_id;
if(Yii::app()->user->id === $owner_id)
return true;
return false;
}
在这个代码中的FindBYPK函数$ _GET ['post_id']这个值从哪里得到
答案 3 :(得分:0)
您可以在当前控制器中创建一个函数,并在表达式本身中调用它。
博客文章的一个例子:
将此功能放在您的访问规则所在的当前控制器中。
function isPostOwner() {
$post = Post::model()->findByPk($_GET['post_id']);
$owner_id = $post->owner_id;
if(Yii::app()->user->id === $owner_id)
return true;
return false;
}
在accessRules部分中,您可以执行以下操作:
public function accessRules(){
return array(
...
array('allow',
'actions'=>array('update'),
'expression'=>"Yii::app()->controller->isPostOwner()",
));
}
希望有所帮助。
答案 4 :(得分:0)
从PHP 5.3开始,可以使用匿名函数而不是字符串中的代码
...
'expression' => function ($user) {
return $user->... == ...;
},
...