Я пишу приложение yii2, которое в основном используется как консольное приложение. У меня есть компоненты или (микро) сервисы, которые извлекают некоторые данные с сервера, обрабатывают их и сохраняют информацию, которая мне нужна, в БД. Конечно, есть несколько для петель и в этих циклах я вывести свой текущий прогресс с использованием yii\helpers\Console::updateProgress
или просто echo
наблюдать за ходом и результатами тестирования (например, начиная с ххх продуктов). На некоторых событиях я регистрирую важную информацию Yii::info()
или же Yii::error()
и так далее. Обычно cron обрабатывает такие задачи, как pullProductUpdates
или что-то еще, и я.
Однако в некоторых случаях мне нужен метод (т.е. pullProductUpdates
) в моем веб-приложении тоже. Но тогда не должно быть никаких echo
команда активна или Console::updateProgress
команды.
Конечно, у меня нет проблем с методами ведения журналов от Yii, потому что я настроил цели журналов, и они не будут отражать что-либо. Но я не уверен, как справиться с echo
команды …
Один из способов проверить это $_SERER['REMOTE_ADDR']
установлен или нет. В консоли он будет оценивать null
так что я могу исказить if {} else {}
вокруг. Вероятно, лучшим решением будет написать log()
или же progress()
метод. Черта может быть полезной?
Итак, как мне разработать решение? Есть ли шаблон для этого? Должны ли мои сервисы реализовывать такой интерфейс, как loggable
или же proressable
? Или использовать объекты Logger / Progress и использовать какой-нибудь DI (внедрение зависимостей)? Потому что я не хочу писать эти log()
или же progress()
методы функционируют более одного раза. Кроме того, я не могу использовать функцию прогресса в веб-приложении. Одна из причин в том, что я не знаю, как это сделать (если это возможно с php здесь), но это был бы другой вопрос.
Заранее спасибо.
Как программист PHP вы должен знать и использовать PSR. В этом случае вы должны использовать внедрение зависимостей и LoggerInterfaces.
Для веб-приложения вы должны сконфигурировать ваш составной корень, чтобы использовать реализацию регистратора, которая записывает в файл. Для консольного приложения вы должны войти в терминал.
Корень композиции — это место, где вы настраиваете свой контейнер внедрения зависимостей (DIC). Узнайте больше о Yii DIC здесь.
Для этого вы должны иметь возможность переключаться между этими двумя корнями композиции с помощью переменной среды или php_sapi_name.
Других решений пока нет …