Как мне проверить, выполняется ли с консоли CakePHP?

#php #cakephp

#php #cakephp

Вопрос:

У меня есть консольная оболочка CakePHP, которая работает нормально, пока Model->afterFind() не попытается добавить некоторые данные к результатам, которые включают добавление ссылок, которые, похоже, не работают при вызове из консоли.

Есть ли способ проверить в Model->afterFind() функции обратного вызова, вызывается ли она из консольной оболочки, чтобы я мог пропустить проблемный раздел, который мне все равно не нужен?

Спасибо, Ян

Ответ №1:

Я не слишком уверен, есть ли для этого Cake-способ, но вы можете сделать это с помощью обычного PHP

  if(php_sapi_name() == 'cli' amp;amp; empty(getClientIP())) {
      //running via CLI
 } else {
      //running normally
 } 
  

Комментарии:

1. Использование php_sapi_name() для проверки того, выполняемся ли мы через cli, сработало бы, особенно если бы оно было обернуто в функцию AppModel для повторного использования и оптимизации. Однако, в конце концов, я обнаружил, что могу предотвратить возникновение ошибки, ужесточив поиск, который вызвал проблему (удалив определенное поле из запроса), так что раздел, вызывающий проблему, никогда не вводился из-за других уже выполненных тестов.

2. всегда более одного способа освежевать кота 🙂

Ответ №2:

Мне кажется, что вы нарушаете рекомендации MVC, если ваш бизнес-уровень (модель) оказывает неблагоприятное воздействие при запуске в разных контекстах. Что бы вы ни вводили в Model-> afterFind(), должно быть полностью независимым от того, как выполняется приложение.

С учетом этого, уровень модели CakePHP вообще не осведомлен о контексте выполнения. Одним из решений было бы справиться с этим, передав флаг уровню модели из оболочки. ie:

В верхней части app_model.php:

 var $isShellContext = false;
  

Затем в вашей оболочке:

 $this->Model->isShellContext = true;
  

А затем в Model-> afterFind():

 if(!$this->isShellContext) {
   // add links, etc
}