質問
OW accessRulesのexperessionsに引数を渡します コードは以下の式が評価されているクラスで定義されていない$ OWNER_ID becouse仕事をしません。それを修正するためにどのように任意のアイデア?
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から1のストリングに代えてコードの匿名関数を使用することができる
...
'expression' => function ($user) {
return $user->... == ...;
},
...
所属していません StackOverflow