Yii2. Как работать с урлами если у вас несколько приложений в одном проекте
Часто при разработке проекта разбитого на несколько приложений возникает проблема: как получить урл на ресурс из другого приложения проекта. Допустим у вас в проекте есть приложения: форум, интернет-магазин, панель управления и промо-сайт. Все это приложения относятся к одному проекту, но приложения: форум, интернет-магазин и промо сайт должны управляться через "панель управления".
Соотвественно у "панели управления" есть свой компонент UrlManager со своими правилами для построения урлов, который отвечает только за построение урлов "панели управления" и который совершенно не знает о правилах для других приложений. Но в панели управления нам нужно получать ссылки на ресурсы других приложений. Как же быть в таком случае?
На самом деле решается все довольно просто, мы просто создаем несколько экземпляров UrlManager в "панели управления" каждый из которых используют правила урлов из соотвествующих приложений. Т.е. в конфигурации мы получаем следующий примерно код:
//...
'components' => [
//...
'urlManager' => [
// правила урлов для панели управления
],
'urlManagerForum' => [ // правила урлов для форума
'class' => 'yii\web\UrlManager',
'baseUrl' => '',
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => include("forum/config/inc/urlRules.php") //файл с правилами для форума
],
],
//...
Для получения урла для форума нам надо просто вызвать код вида:
echo Yii::$app->urlManagerForum->createUrl(['post/detail', 'postId' => $model->id]);
Все очень просто