Допустим frontend/config/main.php содержит следующие настройки urlManager:
//... 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'frontend\components\MyClassUrlRule'], '' => 'site/index', '<controller:\w+>/<action:\w+>/' => '<controller>/<action>', ], ], //...
В свою очередь backend/config/main.php содержит следующие настройки urlManager:
//... 'components' => [ //... 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '/admin' => 'site/index', '<controller:\w+>/<action:\w+>/' => '<controller>/<action>', ], ], ], //...
В админке (backend) нам необходимо сделать ссылку на страницу сайта (frontend) при этом обработать ее нашим классом (MyClassUrlRule) в котором url будет преобразован к необходимому виду.
Первое, что необходимо сделать это добавить urlManager сайта (frontend), открываем backend/config/main.php и добавляем под urlManager следующий код:
//... 'components' => [ //... 'urlManager' => [ //... ], 'urlManagerFrontend' => [ 'class' => 'yii\web\UrlManager', 'baseUrl' => '', 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'frontend\components\MyClassUrlRule'], '' => 'site/index', '<controller:\w+>/<action:\w+>/' => '<controller>/<action>', ], ], ], //...
Теперь в админке (backend) в нужном месте вызываем метод createUrl следующим образом:
echo Yii::$app->urlManagerFrontend->createUrl(['post/detail', 'postId'=>$model->id]);
И получаем необходимую ссылку.
По аналогии можно сделать и для ссылки с сайта (frontend) на админку (backend).
Комментарии
А где код класса MyClassUrlRule?
ОтветитьЯ так понимаю автор указал его для примера, если у вас нет специфического класса для url manager, то он вам не нужен
ОтветитьДобрый день!
ОтветитьСпасибо за пример, все работает. Одного только не пойму, почему не работает вариант:
Url::to('@frontend/web/images/catalog/'.$model->img)
Картинка получается:
<img src="G:\OSPanel\domains\cuberpress/frontend/web/images/catalog/product1.jpg" alt="">
Абсолютный адрес тоже по идее должен работать.