2015-09-13 18 views
-1

我必須在錯誤處理程序中配置common/main.php文件,但不能重定向錯誤操作。所以請幫助我解決這個錯誤。如何在yii2中重定向錯誤操作?

main.php

'components' => [ 
....... 
'errorHandler' => [ 
      'errorAction' => 'site/error', 
     ], 
....... 
], 

SiteController.php

<?php 
namespace backend\controllers; 

use Yii; 
//use yii\web\Controller; 
use common\models\LoginForm; 
use common\models\EmailTemplate; 
use backend\components\BackendController; 
use common\models\Users; 

//use common\components\Helpers; 
/** 
* Site controller 
*/ 
class SiteController extends BackendController 
{ 
    /** 
    * @inheritdoc 
    */ 

    public function beforeAction($event) 
    { 
     //print "before action";exit; 
     return parent::beforeAction($event); 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
     ]; 
    } 

    public function actionError(){ 
     print "Here: Error Action";exit; 
    } 

    public function actionIndex() 
    { 
     if(empty(Yii::$app->session['admin_user_id'])){ 
      return $this->redirect(['site/login']); 
     } 
     // Yii::$app->Helpers->getSettings('test'); 
     return $this->render('index'); 
    } 


} 

錯誤輸出:

An Error occurred while handling another error: 
exception 'yii\web\NotFoundHttpException' with message 'Your request not found.' in F:\xampp\htdocs\school\backend\components\BackendController.php:52 
Stack trace: 
#0 F:\xampp\htdocs\school\backend\components\BackendController.php(25): backend\components\BackendController->checkpermission() 
#1 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Object.php(107): backend\components\BackendController->init() 
#2 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Controller.php(81): yii\base\Object->__construct(Array) 
#3 [internal function]: yii\base\Controller->__construct('site', Object(yii\web\Application), Array) 
#4 F:\xampp\htdocs\school\vendor\yiisoft\yii2\di\Container.php(366): ReflectionClass->newInstanceArgs(Array) 
#5 F:\xampp\htdocs\school\vendor\yiisoft\yii2\di\Container.php(151): yii\di\Container->build('backend\\control...', Array, Array) 
#6 F:\xampp\htdocs\school\vendor\yiisoft\yii2\BaseYii.php(340): yii\di\Container->get('backend\\control...', Array) 
#7 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(568): yii\BaseYii::createObject('backend\\control...', Array) 
#8 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(521): yii\base\Module->createControllerByID('site') 
#9 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(449): yii\base\Module->createController('site/error') 
#10 F:\xampp\htdocs\school\vendor\yiisoft\yii2\web\ErrorHandler.php(80): yii\base\Module->runAction('site/error') 
#11 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\ErrorHandler.php(101): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException)) 
#12 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException)) 
#13 {main} 
Previous exception: 
exception 'yii\web\NotFoundHttpException' with message 'Your request not found.' in F:\xampp\htdocs\school\backend\components\BackendController.php:52 
Stack trace: 
#0 F:\xampp\htdocs\school\backend\components\BackendController.php(25): backend\components\BackendController->checkpermission() 
#1 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Object.php(107): backend\components\BackendController->init() 
#2 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Controller.php(81): yii\base\Object->__construct(Array) 
#3 [internal function]: yii\base\Controller->__construct('teacher', Object(yii\web\Application), Array) 
#4 F:\xampp\htdocs\school\vendor\yiisoft\yii2\di\Container.php(366): ReflectionClass->newInstanceArgs(Array) 
#5 F:\xampp\htdocs\school\vendor\yiisoft\yii2\di\Container.php(151): yii\di\Container->build('backend\\control...', Array, Array) 
#6 F:\xampp\htdocs\school\vendor\yiisoft\yii2\BaseYii.php(340): yii\di\Container->get('backend\\control...', Array) 
#7 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(568): yii\BaseYii::createObject('backend\\control...', Array) 
#8 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(521): yii\base\Module->createControllerByID('teacher') 
#9 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Module.php(449): yii\base\Module->createController('teacher/index') 
#10 F:\xampp\htdocs\school\vendor\yiisoft\yii2\web\Application.php(84): yii\base\Module->runAction('teacher/index', Array) 
#11 F:\xampp\htdocs\school\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#12 F:\xampp\htdocs\school\backend\web\index.php(19): yii\base\Application->run() 
#13 {main} 

任何錯誤發現或扔在上面的輸出錯誤。 請幫我

+0

請顯示您的站點控制器。 'function action()'部分 – scaisEdge

+0

並且權限也是(在控制器中) – scaisEdge

+0

scaisEdge:請顯示我的完整控制器。 –

回答

0

在你的配置和你的actionError沒有問題我用echo而不是print但是未成年人。

對於鑑於actionError工作我都談到了行動()這樣

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

否則你總是使用yii\web\ErrorAction類,而不是你的函數

通過您顯示錯誤消息,我認爲k爲問題在你不是新的錯誤功能,但與一些權限有關

+0

我必須手動創建權限模塊並拋出錯誤「拋出新的NotFoundHttpException(」您的請求未找到。「);」 –

+0

然後你的答案'如何重定向yii2中的錯誤行爲'被解決了嗎? – scaisEdge

+0

沒有解決....... –