Как отслеживать внутренний рабочий процесс CakePHP

Краткое описание

Сейчас я привыкаю к ​​CakePHP и мне интересно, как получить больше отладочной информации о том, что происходит внутри фреймворка.

Позвольте мне, пожалуйста, объяснить мою ситуацию немного подробнее

Как вы знаете, CakePHP многое делает для вас, не заставляя вас писать дополнительный код. Одним из примеров является обработка моделей. Я только что создал модель пользователя и добавил правила проверки (никаких других методов). Как описано в API, такие методы, как сохранение, будут работать. После этого я создал нужный контроллер и представление для добавления нового пользователя. Когда я пытаюсь добавить пользователя из представления, я просто получаю флэш-сообщение The user could not be created. Please, try again. Никаких нарушений проверки не мигает.

Я также установил уровень отладки на 2: Configure::write('debug', 2);, но не получил никаких ошибок. error.log внутри \tmp\logs также пусто.

Я действительно хочу научиться решать эти проблемы в будущем.

Что еще я могу сделать для отладки/отображения внутренних процессов торта?

Большое спасибо за Вашу помощь!


person Gundon    schedule 20.10.2011    source источник
comment
Вы просматриваете/выводите журналы SQL? Я предполагаю, что это ситуация с доступом к базе данных/источнику данных, и вполне возможно, что Cake выполнил проверку правильно, но SQL выполнился неожиданным образом. SQL не выдает исключение в случае сбоя, а просто предупреждение (хотя оно должно отображаться в ваших журналах/выходных данных), и неправильно сформированные запросы могут выполняться правильно без фактического сохранения данных.   -  person Ben Brocka    schedule 21.10.2011
comment
Вы имеете в виду исполняемые SQL-операторы? Да, они отображаются, но они показывают только операторы SELECT. В любом случае я вижу, что выполняются функции beforeSave() и save() из моей модели, но по какой-то причине save() возвращает false. У вас есть идеи, как это отследить без реализации моей собственной функции save()?   -  person Gundon    schedule 21.10.2011
comment
Я делал то же самое уродливым, но простым способом, делая такие вещи, как die($this-›data) непосредственно перед сохранением, чтобы убедиться, что сохраненные данные в правильном формате, если все числа и индексы массива проверяются правильно, а проверка выполняется. прохождение, вам понадобится настоящий след, как в ответе handsoaten   -  person Ben Brocka    schedule 21.10.2011
comment
Был также способ перехватывать операторы SQL вставки/обновления, о чем я говорил, но начиная с Cake 1.3 я уже не помню, как их перехватывать. Раньше было так, если вы die() после вызова model->save(), вы могли их поймать, но я не знаю, как вызвать дамп торта SQL внутри контроллера, а не представления.   -  person Ben Brocka    schedule 21.10.2011


Ответы (2)


DebugKit — это официальный плагин, который дает вам много информации о запросе, запросах и переменных, созданных Cake:

https://github.com/cakephp/debug_kit

Вы также можете использовать trace() и другие методы в отладчике, чтобы показать, что выполняется в фоновом режиме:

http://book.cakephp.org/2.0/en/development/debugging.html

person bjudson    schedule 20.10.2011
comment
Спасибо за Ваш ответ! В частности, debug_kit кажется отличным дополнением. Но, к сожалению, я до сих пор не вижу ошибок. Я вижу, что beforeSave() и save() из моей модели выполняются, но по какой-то причине save() возвращает false. У вас есть идеи, как это отследить без реализации моей собственной save()-функции? - person Gundon; 21.10.2011
comment
beforeSave() — хорошее место для размещения pr($this->data); return true;, чтобы убедиться, что массив, отправленный в ORM, выглядит хорошо. Вы также можете извлечь фактически выполняемый запрос из DebugKit и запустить его непосредственно в своей базе данных, предполагая, что запрос вообще выполняется. - person bjudson; 21.10.2011

Используйте PHP IDE со встроенным отладчиком. Это позволит вам следить за выполнением построчно по мере его выполнения и даже проверять значения переменных по ходу выполнения. Netbeans является бесплатным.

person John Watson    schedule 20.10.2011