【发布时间】:2019-04-26 08:38:30
【问题描述】:
如果路由无效(没有请求的控制器/操作),我一般不会显示错误页面,而是将用户重定向到起始页面。为了使它听起来重定向应该只发生在“正常”页面请求上。虽然AJAX calls 也可能无效,但我不想在此处向浏览器发送重定向。
我怎样才能有效地做到这一点?
【问题讨论】:
标签: php redirect yii2 url-routing yii2-urlmanager
如果路由无效(没有请求的控制器/操作),我一般不会显示错误页面,而是将用户重定向到起始页面。为了使它听起来重定向应该只发生在“正常”页面请求上。虽然AJAX calls 也可能无效,但我不想在此处向浏览器发送重定向。
我怎样才能有效地做到这一点?
【问题讨论】:
标签: php redirect yii2 url-routing yii2-urlmanager
您可以覆盖ErrorAction class 并将实现必要的逻辑。例如:
class MyErrorAction extends \yii\web\ErrorAction
{
public $redirectRoute;
public function run()
{
if (!Yii::$app->getRequest()->getIsAjax()) {
Yii::$app->getResponse()->redirect($this->redirectRoute)->send();
return;
}
return parent::run();
}
}
在它之后,你应该在控制器中添加这个动作并配置它
class SiteController
{
public function actions()
{
return [
'error' => [
'class' => MyErrorAction::class
'redirectRoute' => 'site/my-page'
],
];
}
}
并在错误处理程序中配置the route of error action
'errorHandler' => [
'errorAction' => 'site/error',
]
【讨论】: