2016-03-18 21 views
0

我有我使用强制登录与yii2项目Yii2需要登录错误处理工作不

$config = [ 
'id' => 'basic', 

'basePath' => dirname(__DIR__), 

'on beforeAction' => function ($event){ 

    if(Yii::$app->user->isGuest && Yii::$app->getRequest()->url !== Url::to(Yii::$app->getUser()->loginUrl)) 
    { 
     Yii::$app->response->redirect(Url::to(\Yii::$app->getUser()->loginUrl)); 
    } 
}, 

这似乎对于绝大多数的情况下工作如下因素片断。但是,如果我尝试访问不存在的控制器/操作/ url,则按预期得到404页面。我遇到的问题是,如果有人是客人,我甚至不希望他们看到错误页面,他们可以登录或简单地查看登录页面。使用上面的代码片断,重定向似乎不起作用,并显示错误页面。

有没有人遇到类似问题或解决方案?

我已经测试放置错误页面重定向更新本身即

<?php 
return Yii::$app->controller->redirect("http://www.google.com"); 
?> 

似乎连这个重定向是行不通的。所以,就好像重定向在存在错误时根本不会工作。

回答

0

yii的文档再次是国王。即使我已经扫描了错误处理程序Docs大约10次,但我明显错过了一条信息。

Error Handler文件,我们可以看到下面一行:

注意:如果你需要在一个错误处理程序重定向,这样做的方式如下:php Yii::$app->getResponse()->redirect($url)->send(); return;

所以,如果我改变我的一小部分内容再次在世界上是正确的。

'on beforeAction' => function ($event){ 

    if(Yii::$app->user->isGuest && Yii::$app->getRequest()->url !== Url::to(Yii::$app->getUser()->loginUrl)) 
    { 
     Yii::$app->getResponse()->redirect(Url::to(\Yii::$app->getUser()->loginUrl))->send(); 
     return; 
    } 

}, 

想想我现在正在更新我的片段。