2016-03-27 08:41:08 2231次浏览 1条回答 0 悬赏 10 金钱

比如

访问了控制器下不存在的方法,请求数据库中不存在的值,操作权限不够......

这个我想大概是自己定义一个错误页面,然后跳转过去,然而在每一个控制器里面做逻辑判断会不太麻烦了,有没有什么好的办法,求教。

  • 回答于 2016-03-31 10:10 举报

    定义一个控制器基类,所有的控制器都继承这个基类,除了包括登录和退出的类不用继承
    这是我的后台控制器基类,权限还没有加上去,只有最基本的判断登录和404跳转,你可以参考参考

    
    namespace backend\controllers;
    use Yii;
    use yii\web\Controller;
    
    class BackendBaseController extends Controller
    {
        public $layout  = '/notlayouts';
        public function beforeAction($action)
        {
            if (empty(Yii::$app->user->getId())) {
                Yii::$app->controller->redirect(['/site/login']);
                return false;
            }
            //判断权限
            return true;
        }
        public function actions()
        {
            return [
                'error' => [
                    'class' => 'yii\web\ErrorAction',
                ],
            ];
        }
        public function actionError()
        {
            $this->layout = '@backend/views/layouts/notlayouts.php';
            if (\Yii::$app->exception !== null) {
                return $this->render('error', ['exception' => \Yii::$app->exception]);
            }
        }
    }
    

    只要你在其他控制器不重写actionError()方法,404就会跳到基类设置的页面中

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
tw1996
见习主管

tw1996

注册时间:2016-03-13
最后登录:2020-03-25
在线时长:37小时2分
  • 粉丝3
  • 金钱0
  • 威望0
  • 积分370

热门问题