Условная загрузка компонентов в CakePHP - PullRequest
1 голос
/ 22 октября 2010

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 23 октября 2010

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

В вашем app_controller

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

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

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

2 голосов
/ 25 октября 2010

Во-первых, спасибо Адаму Джайлсу за отличный ответ. Я не думал смотреть на обратный вызов __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) );

Кажется, до сих пор это работает очень хорошо.

2 голосов
/ 23 октября 2010

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

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

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

...