Php 如何在特定控制器/模块的yii2 localeurls中禁用区域设置重定向
我习惯于在Yii2中与当地人相处。一切都很顺利。通过阅读文档,您可以看到,自动重定向到配置的语言或默认语言(即使Php 如何在特定控制器/模块的yii2 localeurls中禁用区域设置重定向,php,yii2,Php,Yii2,我习惯于在Yii2中与当地人相处。一切都很顺利。通过阅读文档,您可以看到,自动重定向到配置的语言或默认语言(即使enableLanguageDetection为false)。我创建了一个应用程序来确保这个功能很快就会实现 下面是我的精细main.php配置: main.php中的默认语言配置根据: 现在,我为一个API案例创建了一个模块,如下所示。其中,apiroute参数映射到myapi模块: API模块路由 application.com/api/ 模块类 如果调用API模块,我不想将yii
enableLanguageDetection
为false
)。我创建了一个应用程序来确保这个功能很快就会实现
下面是我的精细main.php
配置:
main.php
中的默认语言配置根据:
现在,我为一个API案例创建了一个模块,如下所示。其中,api
route参数映射到myapi
模块:
API模块路由
application.com/api/
模块类
如果调用API模块,我不想将yii2localeurls重定向到区域设置。找不到有关为特定的
模块
、控制器
或路由
禁用重定向的任何信息。此时,您提到的组件似乎并不支持这种行为。所以我担心这个问题没有简单的答案(至少我想不出来)
然而…由于URL解析是在整个过程的早期完成的,因此会给您带来一些麻烦。在开始解析之前,只有一个点可以连接到:“beforerequest” 因此,我在这里看到的唯一解决方法是在配置中添加第二个(常规)
urlManager
,该配置适用于API,并在检测到API请求时将其替换掉
这样做的方法是+-如下所示:
'components' => [
'apiUrlManager' => [
'class' => '\yii\web\UrlManager',
...
]
]
在配置(顶层)中也添加此项:
每当api请求进来时,它都会使用常规配置的组件进行URL解析,并跳过语言检测等
它是有效的,但它是否是最好的方法?我将由你决定。或者,您也可以始终添加一个功能请求,将忽略路由支持添加到localeurls组件:)Update/Answer: 现在允许定义
ignoreLanguageUrlPatterns
以从区域设置匹配中排除路由。看
在我的例子中,我希望忽略由localurl转换的/api
。我的yii2配置
如下所示。它就像一个符咒
'components' => [
'urlManager' => [
'class' => 'codemix\localeurls\UrlManager',
'languages' => [
'en' => 'en-gb',
'de' => 'de-de'
],
'enableLanguageDetection' => false,
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
// Ignore / Filter route pattern's
'ignoreLanguageUrlPatterns' => [
'#^api/#' => '#^api/#',
],
],
],
谢谢你的回答。我在考虑这样的解决方案,但是。。我启动了一个拉请求以使过滤器工作:。显然,通过拉请求自己添加功能更好。:)它实际上是有效的功能,您应该能够排除某些路由。
//namespace define
namespace app\modules\api;
use Yii;
/**
* Class api
*
* @package app\modules\api
*/
class api extends \yii\base\Module
{
// ####################################### Class attributes // #####################################################
/**
* Controller namespace
* @var string
*/
public $controllerNamespace = 'app\modules\api\controllers';
// ########################################## Class methods // #####################################################
/**
* Init API module
*/
public function init()
{
//call parent class init
parent::init();
}
}
'components' => [
'apiUrlManager' => [
'class' => '\yii\web\UrlManager',
...
]
]
'on beforeRequest' => function($event) {
if (substr($_SERVER['REQUEST_URI'], 0, 5) == '/api/')
\Yii::$app->set('urlManager', \Yii::$app->get('apiUrlManager'));
},
'components' => [
'urlManager' => [
'class' => 'codemix\localeurls\UrlManager',
'languages' => [
'en' => 'en-gb',
'de' => 'de-de'
],
'enableLanguageDetection' => false,
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
// Ignore / Filter route pattern's
'ignoreLanguageUrlPatterns' => [
'#^api/#' => '#^api/#',
],
],
],