Задать вопрос
@balex777

Как получить yii\web\Application Object(Yii:$app) frontend из backend в yii2?

Контролер находится в backend.
Yii:$app выдает данные о приложении только бекэнда, а надо и фронтенда тоже чтобы получить контролеры которые там есть.
Как получить данные приложения frontend из бэкэнда?
  • Вопрос задан
  • 299 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Yii:$app->controller получает текущий контроллер. Не важно где вы находитесь. Скорее всего вы имели ввиду роутинг между frontend и backend.

Что бы во frontend иметь возможность формировать ссылки на контроллеры backend необходимо вo frontend добавить новый urlManager

В \progect\frontend\config\main.php добавьте следующий компонент
'urlManagerBackend' => [
            'class' => 'yii\web\urlManager',
            'baseUrl' => 'http://yoursitedomain.ru',
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => require(__DIR__ . '../backend/routes.php'),
        ],

После это вы можете легко создавать ссылки на backend из frontend используя второй менеджер
Yii::$app->urlManagerBackend->createUrl(['controller/action', 'parametr1' => 'value1']),


Обратите внимание что правила роутинга вынесены в отдельный файл т.к. эти правила будут использоваться как в urlManager backend, так и в urlManagerBackend во frontend. Это избавляет нас от дублирования.

Аналогичным образом вы сможете настроить формирование ссылок на frontend из backend

Если вам нужно именно получить все роуты в системе, то можно посмотреть как это реализовано популярном в расширении RBAC
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander
Yipee-ki-yay
Вы явно что то делаете не так... В принципе ситуация, когда из одного контроллера нужно дёргать другой - это нарушение архитектуры. А данные получаются через модели. Если модель используется только во frontend или backend, то она должна лежать в соответствующем каталоге. Если это общая модель, то используйте common.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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