4

accessRules 式に引数を渡す方法 以下のコードは、式が評価されるクラスで $owner_id が定義されていないため、機能しません。それを修正する方法はありますか?

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

5 に答える 5

7

何をしようとしているのか、何が問題なのかを判断するのは非常に困難ですが、変数が正しく解釈されるように、配列を作成する際に単一引用符ではなく "{}" と二重引用符を使用します。


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


于 2010-06-09T13:12:46.247 に答える
2

使用できます

 array('allow',
            'actions'=>array('update'),
            'users'=>array(Yii::app()->user->name),
            'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))',
                    ),
于 2011-05-24T03:42:52.590 に答える
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'] のこの値はどこから取得されますか

于 2015-06-10T07:23:29.800 に答える
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()",
        ));
}

お役に立てば幸いです。

于 2012-03-01T03:28:27.907 に答える
0

PHP 5.3 以降、文字列内のコードの代わりに無名関数を使用できます

...
'expression' => function ($user) {
  return $user->... == ...;
},
...
于 2014-01-02T12:14:37.180 に答える