Загрузка условного компонента в CakePHP

Я использую компонент DebugKit в своем проекте, но я хочу включить его только на промежуточном сервере и не загружать его при работе с производственного сервера.

Я знаю, что могу отключить его с помощью значения конфигурации debug, но я хочу сохранить это значение равным 1 для обоих серверов.

Я попробовал условно определить константу «DEBUG_KIT» в bootstrap.php как имя компонента (например, «DebugKit.Toolbar») или null. Затем используйте эту константу в определении переменной var $ в верхней части файла app_controller. Ну, Cake не любит иметь нуль в массиве компонентов и barfs. Не нравится пустая строка.

Я чувствую, что что-то упускаю, но не вижу леса для деревьев. Заранее спасибо!

Я делаю что-то подобное в своих приложениях: я бы использовал метод __construct для обнаружения присутствия DEBUG_KIT и добавил его в массив $ components. Эта функция вызывается перед обработкой массива $ components, поэтому вы можете добавлять / удалять компоненты прозрачно.

В вашем app_controller

 function __construct(){ if(DEBUG_KIT){ $this->components[] = 'DebugKit.Toolbar' } parent::__construct(); } 

Если у вас есть функция _ construct в любом или ваших индивидуальных контроллерах, не забудьте включить parent :: _construct (); иначе вы «сломаете цепочку».

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

Я думаю, что основная цель DebugKit связана с тем, что он находится в режиме отладки, поэтому я понимаю, что инструменты не предоставляют возможности для отключения без отключения режима отладки.

Тем не менее, если вам это абсолютно необходимо, я считаю, что лучше всего настроить app/plugins/debugkit/controllers/components/toolbar.php , дополняя существующую проверку режима отладки в ToolbarComponent::initialize с проверкой на ваш постоянная.

(Для чего это стоит, я думаю, вам было бы лучше отключить режим отладки на вашем производственном сервере и использовать ошибки / предупреждения, зарегистрированные в /app/tmp/logs/error.log чтобы определить проблемы, прошедшие тестирование .)

Во-первых, спасибо Адаму Джайлсу за отличный ответ. Я не думал смотреть на обратный вызов __construct (). Это может быть лучше, чем я нашел. И Дэниэлу Райт, сэр. Я, скорее всего, изменю свой производственный сервер на 0 отладки в ближайшее время и начнет просмотр журналов ошибок.

Я нашел свой ответ вскоре после публикации этого вопроса. В DebugKit есть параметр «autoRun», который включает и выключает его. Итак, я сначала установил глобальную константу в bootstrap.php следующим образом:

 define( 'IS_DEV', ($_SERVER['SERVER_NAME'] == 'staging.example.com') ); 

Затем в app_controller.php я использую его для установки параметра autoRun в выражении $ components.

 var $components = array( 'DebugKit.Toolbar'=>array('autoRun'=>IS_DEV) ); 

На данный момент это работает очень хорошо.