kzpromo
@kzpromo
Yii2 Framework Developer

Yii2 ошибка генерации ссылок (Yii2 и организация мультиязычности) как исправить?

Добрый день, прочитав и применив к своему проекту статью, описанную на хабре (Yii2 и организация мультиязычности), у меня возникла следующая проблема при конфигурации

/frontend/config/main.php
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'class'=>'frontend\components\LangUrlManager',
            'rules'=>[
                '/' => 'site/index',
                '<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',
                
                'shop/view/<id:[\d]+>' =>'site/view',
                'shop/category/<category_url:[\w_-]+>/<id:[\d]+>'=>'site/view',
                'shop/category/<category_url:[\w_-]+>'=>'site/category',
            ]
        ],

при генерации ссылки типа
<?php echo Html::a("Подробнее", ['shop/view', 'id' => $item->id], ['class' => "btn btn-default"]); ?>


у меня генерируются ссылка такого рода mysite.ru/ru/shop/view/*?id=1

Попробовал залезть в код
и добавил следующее, дабы убрать звездочку и ?id=

frontend/components/LangUrlManager.php
$url = str_replace("*", "", $url);
if($params['id']){
    $url = str_replace("?id=", '', $url);
}


Как решить проблему, чтобы ссылки генерировались нормально? Может быть я что-то упускаю? Написать комментарий на хабре не предоставляется возможным.

Благодарю!
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 1
Скорее всего, проблема в приоритете правил в конфиге.
'<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',

расположено перед
'shop/view/<id:[\d]+>' =>'site/view',
и поэтому при формировании ссылки применяется именно оно.
То есть,
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'class'=>'frontend\components\LangUrlManager',
            'rules'=>[
                '/' => 'site/index',
                'shop/view/<id:[\d]+>' =>'site/view',
                'shop/category/<category_url:[\w_-]+>/<id:[\d]+>'=>'site/view',
                'shop/category/<category_url:[\w_-]+>'=>'site/category',
                 '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ]
        ],
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы