Получение домена динамически с помощью консоли Symfony Console

Я сталкиваюсь именно с этой проблемой:
Symfony Docs — Как создавать URL-адреса и отправлять электронные письма из консоли

Наши шаблоны электронной почты заполняются «localhost» вместо «my.real-domain.name». При построении ссылок на приложение используется ветка «url (‘some / path’)».

Однако, когда Symfony обычно представляет собой «одну установку на домен», наше приложение разработано таким образом, чтобы один экземпляр мог обрабатывать несколько доменов. Он создает необходимую конфигурацию через различные каналы конфигурации, причем каждый клиент является одним каналом.

Таким образом, я хотел бы избежать настройки «router.request_context.host» и других для каждого канала клиента.

Поэтому я хотел бы получить домен для использования из параметра консоли «—domain», который мы передаем каждой команде консоли instad.

Но вместо того, чтобы делать это в каждой отдельной команде, мне нужно было бы сделать это в одном центральном месте, которое захватывает домен и динамически настраивает «router.request_context» в соответствии с параметром консоли.

Есть ли способ, которым я могу это сделать?

1

Решение

Вы можете зарегистрировать слушателя на диспетчере событий, который слушает ConsoleEvents::COMMAND и настроить его до того, как run метод по команде вызывается.

Например, вы можете использовать сеттер или изменить вход на ConsoleCommandEvent пример.

https://symfony.com/doc/3.4/components/console/events.html

Я не уверен, что это идеальное решение, но это то, о чем я мог думать в данный момент.

0

Другие решения

Вы можете указать маршрутизатору, какой домен использовать при генерации абсолютного URL, например:

    $domain = $input->getArgument('domain');
$context = $this->getContainer()->get('router')->getContext();
$context->setHost($domain);
$route = $this->getContainer()->get('router')->generate('welcome_page', $params, UrlGeneratorInterface::ABSOLUTE_URL);

$output->writeln('Use the following url to show the welcome page for the provided domain');
$output->writeln(sprintf('<info>%s</info>', $route));

Надеюсь это поможет

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector