كيفية تمرير الحجج للوصول إلى تعبيرات القواعد في وحدة تحكم إطار YII
سؤال
OW لتمرير الوسائط إلى تجارب الوصول إلى التجارب لا يعمل الكود أدناه لأن $ 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 Function $ _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;
}
وفي قسم الوصول ، يمكنك القيام بذلك:
public function accessRules(){
return array(
...
array('allow',
'actions'=>array('update'),
'expression'=>"Yii::app()->controller->isPostOwner()",
));
}
امل ان يساعد.
نظرًا لأن PHP 5.3 يمكن للمرء استخدام وظائف مجهولة بدلاً من الكود في سلسلة
...
'expression' => function ($user) {
return $user->... == ...;
},
...
لا تنتمي إلى StackOverflow