Symfony — как узнать, была ли запущена консольная команда с контроллера или с терминала?

Я создаю приложение Symfony, которое использует консольные команды. Та же консольная команда может быть выполнена из событий через контроллер, но она также может быть запущена из терминала. Как я могу выяснить, откуда была запущена команда, чтобы я мог реализовать аутентификацию пользователя, если команда была запущена из терминала. Если команда была запущена с контроллера, то у пользователя уже есть разрешение на запуск. Но если он был запущен из терминала, он должен пройти аутентификацию по имени пользователя и паролю, чтобы я проверил, имеет ли он необходимую роль?

1

Решение

Вы можете проверить, была ли ваша команда запущена из консоли или из контроллера, используя Функция php_sapi_name () или константа PHP_SAPI (который похож на php_sapi_name ())

if ('cli' === PHP_SAPI) {
// command was run from the console
} else {
// command was run from a controller
}
8

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

Консольное приложение Symfony не имеет слоя брандмауэра, как HttpKernel.

Компонент консоли был создан для небольших задач типа «администратор», а не для отдельных пользователей.

Вся проблема может быть решена путем реализации шаблона командной шины.

«Команда» создается веб-контроллером, который защищен и имеет пользователя, и в команде CLI (для crontab) без каких-либо проверок безопасности.

Затем он передается на командную шину, которая переходит к командному обработчику.

Обработчик содержит текущую логику метода execute. Командный объект будет содержать любые данные для выполнения этой логики == ваши текущие входные аргументы и параметры.

Команда Symfony впоследствии очень тонкая, как просто передача входных аргументов в обработчик команд. Как и должно быть.

Если это долго выполняемая задача, она может быть даже выгружена из веб-запроса в рабочую очередь.

Пожалуйста, обратите внимание на конфликт имен. Команда консоли Symfony! == Команда командной шины здесь.

Например, вы можете использовать SimpleBus внутри Symfony:
https://github.com/SimpleBus

Также недавнее сообщение в блоге о проблеме именования @skoop:
http://leftontheweb.com/blog/2016/06/18/Command-or-Controller/

0

По вопросам рекламы [email protected]