我正在使用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' => '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 举报,一经查实,本站将立刻删除。