رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بروز خطا با تعریف شدن accessRules و filters (حل شد)
#1
سلام

در فایل Controller.php دو تا متد بصورت زیر تعریف کردم:
public function filters(){
       return array('accessControl');
   }

   public function accessRules(){
       return array(
           array('allow',
               'controllers' => array('site', 'posts'),
               'actions' => array('error','index', 'view', 'contact', 'about', 'month'),
               'users' => '*',
           ),
           array('deny'),
       );
   }
چون پروژه ام وبلاگ هست میخوام کاربران به همه اکشنها دسترسی داشته باشند چون نیازی به لاگین نیست. فقط مدیر باید لاگین کنه که اونم در ماژول admin ، دسترسیها رو مشخص میکنم.
الآن مشکل بروز خطاییه که با افزودن دو متد بالا بوجود میاد. در عکسی که ضمیمه کردم خطا رو میبینید.

متشکرم.


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#2
'users' => array('*'),
پاسخ
تشکر شده توسط: abdollah110110
#3
در adminController متد زیر رو تعریف کردم ولی changePass رو برای کاربر لاگین نکرده نشون میده البته وقتی که قسمت deny غیر فعال باشه. وقتی deny فعال هست به هیچکدوم از اکشنهای ماژول دسترسی ندارم و url به site/error منتقل میشه که اونم باید به default/errorAdmin منتقل بشه:
public function accessRules(){
       return array(
           array('allow',
               'controllers' => array('default'),
               'actions' => array('errorAdmin','index','adminLogin'),
               'users' =>array('*'),
           ),
           array('allow',
               'controllers' => array('default'),
               'actions' => array('changepass','logOut'),
               'users' =>array('@'),
           ),
           array('deny',
               'users' => array('*'),
           ),
       );
   }
پاسخ
تشکر شده توسط:
#4
شما کنترل رو روی default قرار دادید باید به admin تغییر بدید یا اگه این کد رو داخل کنترل admin مینویسید قسمت کنترل رو حذف کنید.
public function accessRules(){
   return array(
       array('allow',
           'actions' => array('errorAdmin','index','adminLogin'),
           'users' =>array('*'),
       ),
       array('allow',
           'actions' => array('changepass','logOut'),
           'users' =>array('@'),
       ),
       array('deny',
           'users' => array('*'),
       ),
   );
}
...
پاسخ
تشکر شده توسط: abdollah110110
#5
adminController در پوشه components ماژول قرار داره که همه کنترلرهای دیگه ماژول از جمله default از اون مشتق میشن.
برای اینکه این متدها رو در چندین کنترلر مختلف تعریف نکنم، در adminController ، نام کنترلرها رو وارد میکنم و نام اکشنها رو هم میدم. اینجوری این متدها برای همه کنترلرها به ارث برده میشن.
پاسخ
تشکر شده توسط:
#6
خطا رو توی AdminModule تنظیم کردین که روی admin/default/errorAdmin باشه؟ کد کامل کنترلر adminController و default رو بگذارین. adminController رو توی پوشه components گذاشتین؟
پاسخ
تشکر شده توسط: abdollah110110
#7
یه اشتباهی که داشتم این بود که adminError رو errorAdmin نوشته بودم اصلاحش کردم ولی هنوز همان مشکلاتی که در پست 5 گفتم وجود دارن.
این کد کلاس adminController هست که در پوشه modules/admin/components قرار دادم:
class AdminController extends Controller {

     public $layout='/layouts/main';

    public function init() {
     Yii::app()->errorHandler->errorAction = 'admin/default/adminError';
    }

     public function filters(){
        return array('accessControl');
    }

    public function accessRules(){
        return array(
            array('allow',
                'controllers' => array('default'),
                'actions' => array('adminError','index','adminLogin'),
                'users' =>array('*'),
            ),
            array('allow',
                'controllers' => array('default'),
                'actions' => array('changepass'),
                'users' =>array('@'),
            ),
            array('deny',
                'users' => array('*'),
            ),
        );
    }


}

در AdminModule چطوری adminError تنظیم میشه؟
پاسخ
تشکر شده توسط:
#8
متد init رو اونجا بسازین نه توی کنترلر. کلاس AdminController خودتون رو هم توی مسیر modules/admin/components/AdminController.php بسازین و مستقیماً از CController مشتق کنید.
پاسخ
تشکر شده توسط: abdollah110110
#9
متد init رو در adminModule بصورت زیر نوشتم:
public function init()
{
$this->setImport(array(
'admin.models.*',
'admin.components.*',
));
Yii::app()->errorHandler->errorAction = 'admin/default/adminError';
       Yii::app()->clientScript->registerCoreScript('yii');
}
و adminController رو مستقیما از CController مشتق کردم.
مشکلات همچنان پایدار موندن.
پاسخ
تشکر شده توسط:
#10
تیم ویور بدین تو پیام خصوصی ببینم مشکل چیه.
پاسخ
تشکر شده توسط:
#11
در تیم ویوور مشخص شد که اسم ماژول رو هم باید همراه اسم کنترلر بنویسیم(admin/default):
class AdminController extends CController {

    public $layout='/layouts/main';

   public function filters(){
       return array('accessControl');
   }

   public function accessRules(){
       return array(
           array('allow',
               'controllers' => array('admin/default'),
               'actions' => array('adminError','index','adminLogin'),
               'users' =>array('*'),
           ),
           array('allow',
               'controllers' => array('admin/default'),
               'actions' => array('changepass','logOut'),
               'users' =>array('@'),
           ),
           array('deny',
               'users' => array('*'),
           ),
       );
   }

}
در متد init در adminModule هم کد زیرو افزودیم:
Yii::app()->user->loginUrl = Yii::app()->createUrl('admin/default/adminLogin');
مشکل حل شد.
تشکر از استاد شهرکی.
پاسخ
تشکر شده توسط: ADMIN




کاربران در حال بازدید این موضوع: 5 مهمان