Yii2使用UrlManager::createUrl()将语言前置到URL
我正在尝试使用Yii2使用UrlManager::createUrl()将语言前置到URL,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我正在尝试使用UrlManager类的createUrl()方法预先编写语言,例如en或bg,比如www.domain.com/language/ 我只是想测试一下: <?php namespace frontend\components; class UrlManager extends \yii\web\UrlManager { public function createUrl($params) { $url = parent::createUrl
UrlManager
类的createUrl()
方法预先编写语言,例如en
或bg
,比如www.domain.com/language/
我只是想测试一下:
<?php
namespace frontend\components;
class UrlManager extends \yii\web\UrlManager
{
public function createUrl($params)
{
$url = parent::createUrl($params);
return "/en{$url}";
}
}
从这一点上,我期望
www.domain.com/en
,但语言缺失。也许我误解了createUrl
方法。实现这一目标的正确方法是什么 您正在将/en
前置到从父::createUrl()
返回的URL。它将显示您喜欢的/enhttp://example.com/controller/action
,您想要的是在域名后面追加,然后追加URL的其余部分,因此您需要explode()
URL并将所需的区块en
插入所需位置,您可以使用数组()
为了进行更正,您可以使用以下命令
<?php
namespace frontend\components;
class UrlManager extends \yii\web\UrlManager
{
public function createUrl($params)
{
$url = parent::createUrl($params);
$chunks=explode('/', $url);
array_splice($chunks,3,0,"en");
return implode('/',$chunks);
}
}
它将产生
http://example.com/en/controller/action
您正在将
/en
前置到从父::createUrl()
返回的URL。它将显示您喜欢的/enhttp://example.com/controller/action
,您想要的是在域名后面追加,然后追加URL的其余部分,因此您需要explode()
URL并将所需的区块en
插入所需位置,您可以使用数组()
为了进行更正,您可以使用以下命令
<?php
namespace frontend\components;
class UrlManager extends \yii\web\UrlManager
{
public function createUrl($params)
{
$url = parent::createUrl($params);
$chunks=explode('/', $url);
array_splice($chunks,3,0,"en");
return implode('/',$chunks);
}
}
它将产生
http://example.com/en/controller/action
最好的方法是在URL规则中包含语言:
'rules' => [
'<lang:(en|bg)>' => 'site/homepage',
'<lang:(en|bg)>/about' => 'site/about',
// ...
],
现在,您可以像往常一样创建URL,并且仅当您想要更改默认语言时才提供语言:
Url::to(['site/about']); // /en/about
Url::to(['site/about', 'lang' => 'en']); // /en/about
Url::to(['site/about', 'lang' => 'bg']); // /bg/about
您可以通过以下方式获取当前语言:
Yii::$app->request->get('lang', 'en');
最好的方法是在URL规则中包含语言:
'rules' => [
'<lang:(en|bg)>' => 'site/homepage',
'<lang:(en|bg)>/about' => 'site/about',
// ...
],
现在,您可以像往常一样创建URL,并且仅当您想要更改默认语言时才提供语言:
Url::to(['site/about']); // /en/about
Url::to(['site/about', 'lang' => 'en']); // /en/about
Url::to(['site/about', 'lang' => 'bg']); // /bg/about
您可以通过以下方式获取当前语言:
Yii::$app->request->get('lang', 'en');