Yii 2 advanced, делаем ссылки с backend на frontend через urlManager

Допустим frontend/config/main.php содержит следующие настройки urlManager:

  1. //...
  2.  
  3. 'urlManager' => [
  4. 'enablePrettyUrl' => true,
  5. 'showScriptName' => false,
  6. 'rules' => [
  7. ['class' => 'frontend\components\MyClassUrlRule'],
  8. '' => 'site/index',
  9. '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
  10. ],
  11. ],
  12.  
  13. //...

В свою очередь backend/config/main.php содержит следующие настройки urlManager:

  1. //...
  2. 'components' => [
  3. //...
  4.  
  5. 'urlManager' => [
  6. 'enablePrettyUrl' => true,
  7. 'showScriptName' => false,
  8. 'rules' => [
  9. '/admin' => 'site/index',
  10. '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
  11. ],
  12. ],
  13.  
  14. ],
  15. //...

В админке (backend) нам необходимо сделать ссылку на страницу сайта (frontend) при этом обработать ее нашим классом (MyClassUrlRule) в котором url будет преобразован к необходимому виду.

Первое, что необходимо сделать это добавить urlManager сайта (frontend), открываем backend/config/main.php и добавляем под urlManager следующий код:

  1. //...
  2. 'components' => [
  3. //...
  4. 'urlManager' => [
  5. //...
  6. ],
  7.  
  8. 'urlManagerFrontend' => [
  9. 'class' => 'yii\web\UrlManager',
  10. 'baseUrl' => '',
  11. 'enablePrettyUrl' => true,
  12. 'enableStrictParsing' => true,
  13. 'showScriptName' => false,
  14. 'rules' => [
  15. ['class' => 'frontend\components\MyClassUrlRule'],
  16. '' => 'site/index',
  17. '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
  18. ],
  19. ],
  20.  
  21. ],
  22. //...

Теперь в админке (backend) в нужном месте вызываем метод createUrl следующим образом:

  1. echo Yii::$app->urlManagerFrontend->createUrl(['post/detail', 'postId'=>$model->id]);

И получаем необходимую ссылку.

По аналогии можно сделать и для ссылки с сайта (frontend) на админку (backend).

Источник: Перейти
Комментарии (0):
Чтобы оставить свой комментарий, необходимо пройти аутентификацию