是否可以为所有前端 AJAX 请求设置路径
Is it possible to set the path for all frontend AJAX request
我的鼻涕虫是这样的:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<lang>/<p_page>/<p_category>/<p_product>' => 'splitter/manage-request',
'<lang>/<p_page>/<p_category>' => 'splitter/manage-request',
'<lang>/<p_page>' => 'splitter/manage-request',
'<lang>/' => 'splitter/manage-request',
'<lang>' => 'splitter/manage-request',
'' => 'splitter/manage-request',
],
],
我将所有请求发送到我正在解析它们的 SplitterController
。但我不希望将 AJAX 发送给它。是否可以给他们一些默认路由?例如,将它们重定向到后端。我在文档中找不到有关它的信息?感谢链接也是我错过的。谢谢!
根据我的经验,大概有以下几种方案供大家参考:
第一种:最简单的方法是在你的SplitterController中添加一个beforeAction(),在beforeAction()中判断是否是一个ajax请求,然后重定向到你的目标地址,例如:
public function beforeAction()
{
if (\Yii::$app->request->isAjax) {
return \Yii::$app->response->redirect($targetUrl);
}
return parent::beforeAction($action);
}
其二:可以在nginx配置中查看请求是否为ajax请求,然后重定向到你的目标地址
第三:如果不能设置额外的路由规则和配置ajax请求地址,那么可以考虑通过自定义UrlManager::parseRequest()来实现,只要检查是否是一个ajax 在开始解析请求之前请求,然后重定向到您的目标。地址
此答案翻译自Google翻译
我的鼻涕虫是这样的:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<lang>/<p_page>/<p_category>/<p_product>' => 'splitter/manage-request',
'<lang>/<p_page>/<p_category>' => 'splitter/manage-request',
'<lang>/<p_page>' => 'splitter/manage-request',
'<lang>/' => 'splitter/manage-request',
'<lang>' => 'splitter/manage-request',
'' => 'splitter/manage-request',
],
],
我将所有请求发送到我正在解析它们的 SplitterController
。但我不希望将 AJAX 发送给它。是否可以给他们一些默认路由?例如,将它们重定向到后端。我在文档中找不到有关它的信息?感谢链接也是我错过的。谢谢!
根据我的经验,大概有以下几种方案供大家参考:
第一种:最简单的方法是在你的SplitterController中添加一个beforeAction(),在beforeAction()中判断是否是一个ajax请求,然后重定向到你的目标地址,例如:
public function beforeAction()
{
if (\Yii::$app->request->isAjax) {
return \Yii::$app->response->redirect($targetUrl);
}
return parent::beforeAction($action);
}
其二:可以在nginx配置中查看请求是否为ajax请求,然后重定向到你的目标地址
第三:如果不能设置额外的路由规则和配置ajax请求地址,那么可以考虑通过自定义UrlManager::parseRequest()来实现,只要检查是否是一个ajax 在开始解析请求之前请求,然后重定向到您的目标。地址
此答案翻译自Google翻译