Гиперссылка из backend на frontend в Yii2

При разработке сайта на основе фреймворка Yii2 advanced у вас может возникнуть необходимость создание гиперссылок из админской части (backend) на публичную часть (frontend). Например, в таком случае: необходимо посмотреть исправленную в админке статью или новость в дизайне основного сайта.

Если попытаться сформировать гиперссылку в бэкэнде без определенной подготовки, то код

Html::a('View', ['controller/action', 'id' => $id], ['class' => 'btn']);

приведет к формированию ссылки типа

/admin/controller/action/id/35/

но это не то, что нужно, так как URL ведет на бэкенд.

Для корректного формирования ссылок на страницы фронтенда из бэкенда необходимо провести несколько несложных манипуляций:

  1. создать в конфиге backend новый urlManager
  2. сформировать УРЛ в представлении на основе нового urlManager
  3. подать этот УРЛ в гиперссылку

При создании нового urlManager в конфиге бэкенда есть смысл использовать правила rules напрямую из фронтенда. В связи с чем новый компонент отвечающий за формирование ссылок на frontend будет выглядеть так:

'urlManagerFrontend' => [
     'class' => 'yii\web\urlManager',
     'baseUrl' => '/',
     'enablePrettyUrl' => true,
     'showScriptName' => false,
     'enableStrictParsing' => false,
     'suffix'=>'/',
     'rules'=> require($_SERVER['DOCUMENT_ROOT'] . '/advanced/frontend/config/conf_URL.php'),
],

И теперь, чтобы создать гиперссылку из админки на основной сайт просто используйте такую схему

$url_frontend = Yii::$app->urlManagerFrontend->createUrl([
     '/publications/dictionary/','id' => $model->id_dict,
]);
echo Html::a('View',$url_frontend,['class' => 'btn']);

и ссылка получится правильной

/controller/action/id/35/