首页 > 解决方案 > Yii2 使用 UrlManager::createUrl() 将语言添加到 URL

问题描述

我正在尝试使用类的方法来添加语言,例如enbg类似。www.domain.com/language/createUrl()UrlManager

我只是为了测试而尝试的是:

<?php

namespace frontend\components;

class UrlManager extends \yii\web\UrlManager
{
    public function createUrl($params)
    {
        $url = parent::createUrl($params);

        return "/en{$url}";
    }
}

我在我的课程中添加了urlManager

'urlManager' => [
    'class' => 'frontend\components\UrlManager',
    ...
],

从这个我预料到www.domain.com/en但语言缺失。也许我误解了createUrl方法。实现这一目标的正确方法是什么?

标签: yii2yii2-advanced-app

解决方案


您将 附加/en到从parent::createUrl(). 它会向您显示/enhttp://example.com/controller/action,您想要的是在域名之后附加,然后附加 URL 的其余部分,因此您需要explode()在所需位置URL插入所需的块en,您可以使用array_splice().

只是为了更正,您可以使用以下内容

<?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);
    }
}

现在当你打电话给

Yii::$app->urlManager->createUrl(['/controller/action']);

它会产生

http://example.com/en/controller/action

推荐阅读