流来传递参数到accessRules experessions 下面的代码不becouse $ owner_id其中表达式求值未在类中定义的工作。任何想法如何解决这个问题?

public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>'$user->id==$owner_id',
));
}
有帮助吗?

解决方案

这是很难告诉你正在试图做什么,或者什么问题,但我会用“{}”和双引号而不是单引号构建阵列时,让你的变量是正确的解释:


public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>"{$user->id}=={$owner_id}",
));
}


其他提示

可以使用

 array('allow',
            'actions'=>array('update'),
            'users'=>array(Yii::app()->user->name),
            'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))',
                    ),
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']从那里该值在将得到

可以在电流控制器创建一个函数,并调用它在表达本身。

与博客帖子的示例:

将这个功能在电流控制器在您的访问规则。

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()",
        ));
}

希望有所帮助。

由于PHP 5.3可以使用匿名功能,而不是代码的字符串

...
'expression' => function ($user) {
  return $user->... == ...;
},
...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top