2017-11-07 8 views
0

전 yii를 처음 사용하고 일부 관리 역할에서만 사용되는 다음 코드가 있습니다. 필요에 따라yii2의 ForbiddenHttpException에 대해 스타일이 지정된 오류 동작이 반환되지 않습니다.

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      //'only' => ['index', 'view', 'create', 'update','delete'], 
      'rules' => [ 
       [ 
        'allow' => true, 
        'roles' => ['admin'], 
       ], 
      ], 
     ], 
    ]; 
} 

비 관리자 역할에서이 컨트롤러에 모든 시도가 차단되지만 스타일 YII의 오류 조치는 반환되지 않습니다. 내 main.php 파일에 다음과 같은 구성 요소가 :

'errorHandler' => [ 
     'errorAction' => 'main/error', 
], 

을하지만이 작동하지, 내가 가진 전부입니다

An Error occurred while handling another error: 
yii\web\ForbiddenHttpException: شما برای انجام این عملیات، دسترسی ندارید. in C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php:151 
Stack trace: 
#0 C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php(134): yii\filters\AccessControl->denyAccess(Object(yii\web\User)) 
#1 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\web\ErrorAction)) 
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) 
#3 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent)) 
#4 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#5 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Controller.php(164): yii\base\Controller->beforeAction(Object(yii\web\ErrorAction)) 
#6 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(154): yii\web\Controller->beforeAction(Object(yii\web\ErrorAction)) 
#7 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Module.php(523): yii\base\Controller->runAction('error', Array) 
#8 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\ErrorHandler.php(95): yii\base\Module->runAction('main/error') 
#9 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException)) 
#10 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException)) 
#11 {main} 
Previous exception: 
yii\web\ForbiddenHttpException: شما برای انجام این عملیات، دسترسی ندارید. in C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php:151 
Stack trace: 
#0 C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php(134): yii\filters\AccessControl->denyAccess(Object(yii\web\User)) 
#1 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction)) 
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) 
#3 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent)) 
#4 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#5 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Controller.php(164): yii\base\Controller->beforeAction(Object(yii\base\InlineAction)) 
#6 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(154): yii\web\Controller->beforeAction(Object(yii\base\InlineAction)) 
#7 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Module.php(523): yii\base\Controller->runAction('', Array) 
#8 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Application.php(102): yii\base\Module->runAction('main/', Array) 
#9 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#10 C:\xampp\htdocs\food\admin\web\index.php(20): yii\base\Application->run() 
#11 {main} 

모든 지침은 appreciet입니다. 메인 컨트롤러에서

+0

기본 SiteController의 이름을 MainController로 변경했습니다. – goseo

+0

오류보기가 저장된 위치는 어디입니까? MainController 코드 – Kyle

+0

@Kyle을 게시하십시오.'views/main' 디렉토리에'error.php'라는 이름으로 저장됩니다. – goseo

답변

0

내가 그 오류 페이지를 표시하는 데 알아 냈어, 나는 관리자가 아닌 사용자에게 에러 조치의 권한을 부여해야합니다.

[ 
    'actions' => 
      ['logout', 'reset-password', 'request-password-reset', 'error'], 
      'allow' => true, 
      'roles' => ['branch'], 
], 
0

당신이 있어야합니다

public function actions() 
{ 
    return [ 
     'error' => [ 
      'class' => 'yii\web\ErrorAction', 
     ], 
    ]; 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 저는 그것을 MainController에 있습니다 : | – goseo