2010-06-09 6 views
4

ow to accessRules experessions에 인수 전달 expression이 평가되는 클래스에 $ owner_id가 정의되어 있지 않으므로 아래 코드는 작동하지 않습니다. 어떤 아이디어로 그것을 고치는 법? 당신의 변수가 해석되도록 배열을 만들 때yii 프레임 워크 컨트롤러에서 액세스 규칙 표현식에 인수를 전달하는 방법

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

답변

7

그것은 당신이 문제가 무엇인지 할 또는 하려는지 이야기하는 것은 매우 어렵다, 그러나 나는 사용한다 "{}"큰 따옴표보다는 작은 따옴표 올바르게 :

 

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

 
2

귀하는 현재 컨트롤러의 기능을 만들고 표현 자체를 호출 할 수 있습니다

array('allow', 
      'actions'=>array('update'), 
      'users'=>array(Yii::app()->user->name), 
      'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))', 
        ), 
0

를 사용할 수 있습니다.

블로그 게시물 예 :

넣고 액세스 규칙은 현재 컨트롤러에이 기능을 사용하지 않음. 도움이

public function accessRules(){ 
     return array(
     ... 
       array('allow', 
         'actions'=>array('update'), 
         'expression'=>"Yii::app()->controller->isPostOwner()", 
     )); 
} 

희망 :

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 섹션에서

, 당신은이 작업을 수행.

+0

우리는 컨트롤러 이름을 지정해야합니까? –

+0

솔루션이 작동하지 않습니다. –

0

PHP 5.3 하나 FindBYPK 함수 $의 _GET이 코드 문자열

... 
'expression' => function ($user) { 
    return $user->... == ...; 
}, 
... 
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; 
} 

대신 코드 익명의 기능을 사용할 수 있기 때문에 "post_id를 ']에서는

를 얻을 곳에서이 값
관련 문제