微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何在yii2-localeurls中禁用特定控制器/模块的locales重定向

我正在使用yii2-localeurls与Yii2中的语言环境相处.一切都很好.通过阅读文档,您会看到,重定向到已配置的语言或认语言会自动发生(即使enableLanguageDetection为false).我创建了一个ticket@github以确保即将推出此功能.

所以这是我的精细main.PHP配置:

'urlManager' => [
    'class' => 'codemix\localeurls\UrlManager',
    'languages' => [
        'en' => 'en-gb',
        'de' => 'de-de'
    ],
    'enableLanguageDetection' => false,
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [

    ],
],

根据$language,main.PHP中的认语言配置:

'language' => 'en-gb',

现在,我为API案例创建了一个模块,其路由如下. api route-param映射到我的API模块的位置:

API模块路由

application.com/api/\u0026lt;controller\u0026gt;/\u0026lt;action\u0026gt;

模块类

//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();
    }
}

如果调用API模块,我不希望yii2-localeurls重定向到语言环境.找不到有关特定模块,控制器或路由的禁用重定向的任何信息.

解决方法:

在这一点上,它看起来不像你提到的组件实际上支持这种行为.所以我担心这个问题没有简单的答案(至少不是我能想到的).

然而…
由于URL解析在整个过程中很早就完成了,所以它会让你有点蠢蠢欲动.在进行解析之前,只有一个地方可以挂钩:“beforerequest”.

因此,我在这里看到的唯一方法是在您的配置中添加第二个(常规)urlManager,该API适用于API,并在您检测到API请求时将其交换出来.

这样做的方法是 – 像这样:

'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'));
},

每当请求进入api时,它将使用定期配置的组件进行URL解析并跳过语言检测等.

它有效,但它是否是最好的方法?我会把它留给你.
或者你总是可以添加一个功能请求来向localeurls-component添加忽略路由支持:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐