Php 如何在特定控制器/模块的yii2 localeurls中禁用区域设置重定向

Php 如何在特定控制器/模块的yii2 localeurls中禁用区域设置重定向,php,yii2,Php,Yii2,我习惯于在Yii2中与当地人相处。一切都很顺利。通过阅读文档,您可以看到,自动重定向到配置的语言或默认语言(即使enableLanguageDetection为false)。我创建了一个应用程序来确保这个功能很快就会实现 下面是我的精细main.php配置: main.php中的默认语言配置根据: 现在,我为一个API案例创建了一个模块,如下所示。其中,apiroute参数映射到myapi模块: API模块路由 application.com/api/ 模块类 如果调用API模块,我不想将yii

我习惯于在Yii2中与当地人相处。一切都很顺利。通过阅读文档,您可以看到,自动重定向到配置的语言或默认语言(即使
enableLanguageDetection
false
)。我创建了一个应用程序来确保这个功能很快就会实现

下面是我的精细
main.php
配置:
main.php
中的默认语言配置根据: 现在,我为一个API案例创建了一个模块,如下所示。其中,
api
route参数映射到my
api
模块:

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/#',
        ],
    ],
],