PHP пропонує інструменти для налагодження застосунків зі сповіщеннями, попередженнями, помилками та винятками. The Exception class offers information such as the file, line, message, numeric code, backtrace etc. of where an error occurred. Фреймворки об’єктно-орієнтованого програмування на зразок Phalcon головним чином використовують цей клас, щоб прикріпити цю функціональність та надавати інформацію розробнику чи користувачеві.
Незважаючи на те, що він написаний у C, Phalcon виконує методи в PHP, забезпечуючи ті ж можливості, що й інші PHP-фреймворки.
Exceptions
Дуже поширений спосіб керування потоком помилок у вашому застосунку (навмисне чи інакше) це використання поєднання try/catch, щоб відловити винятки. У нашій документації достатньо прикладів, що демонструють таке поєднання.
<?phptry{// ... }catch(\Exception$ex){}
Будь-який виняток, виявлений завдяки цьому поєднанню, буде записано у змінній $ex. A Phalcon\Support\Debug\Exception extends the PHP Exception class. Використання винятків Phalcon дозволяє відрізнити чи їх спричинив код Phalcon, чи щось інше.
Як продемонстровано вище, не має значення що Phalcon скомпільований як PHP-розширення. Інформація винятка містить параметри та виклики методів, які породжували фрагмент винятка вище. Exception::getTrace() provides additional information if necessary.
Constructor
Phalcon\Support\Debug provides visual aids as well as additional information for developers to easily locate errors produced in an application.
NOTE Please make sure that this component is not used in production environments, as it can reveal information about your server to attackers
Наступний демонстраційний ролик пояснює, як він працює:
Щоб активувати його, додайте до вашого bootstrap такий код:
NOTE: Any try/catch blocks must be removed or disabled to make this component work properly.
By default, the component will listen for uncaught exceptions but not low severity errors (warnings, notices etc.). Ви можете змінити цю поведінку, передаючи відповідні параметри в listen()
exceptions - bool
lowSeverity - bool
In the example below, do not listen to uncaught exceptions but listen to non-silent notices or warnings (low severity):
Якщо ваш потік додатку інший, або не хочете вказувати додаткові параметри у listen(), ви завжди можете використовувати listenExceptions() і listenLowSeverity():
NOTE: The listenExceptions() and listenLowSeverity() are ON switches. If you wish to switch listening to exceptions or low severity errors OFF you need to pass false in the listen() method.
Getters
Існує декілька збирачів, які надають інформацію про компонент. Розширюючи їх, можливо також змінити візуальну поведінку цього компонента.
Method
Результат
Description
getCssSources()
string
Returns the stylesheets used to display the contents on screen
getJsSources()
string
Returns the javascript files used to display the contents on screen
getVersion()
string
Returns the link to the current version documentation
Розширення компонента і перевизначення getCssSources(), наприклад, щоб повернути різні директиви CSS HTML, змінять зовнішній вигляд відображення на екрані. The output CSS classes are based on Bootstrap CSS.
Сетери (установлювачі)
Phalcon\Support\Debug also offers some setters to better customize the output when an error occurs in your application.
Method
Description
setShowBackTrace(bool $showBackTrace)
Show/hide the exception’s backtrace
setShowFileFragment(bool $showFileFragment)
Show/Hide the file fragment in the output (related to the exception)
setShowFiles(bool $showFiles)
Show/Hide the files in the backtrace
setUri(string $uri)
The base URI for static resources (see also the Getters section for customization of the component)
Змінні
Ви також можете використовувати метод debugVar() для внесення будь-яких додаткових змінних, які ви хочете показати у відображенні. Це зазвичай власні змінні додатка. Прикладом може бути показ часової інформації для вашого додатку.
As mentioned above, the component must not be enabled in production environments. Оскільки Phalcon не може контролювати таку поведінку, є вбудована функція додавання у чорний список, яка дозволяє розробнику додавати до нього деякі частини інформації, які він не бажає, щоб відображались на екрані, про всяк випадок. Це елементи масивів $_REQUEST і $_SERVER.
У наведеному вище прикладі ми ніколи не показуватимемо змінну some із $_REQUEST, а також hostname з $_SERVER. You can always add more elements not to be displayed, that exist in these two super-globals. Це особливо корисно, якщо ви забудете відключити компонент у вашому виробничому середовищі. Погана практика - залишати її увімкненою, але якщо ви забули, то принаймні певні ключові фрагменти інформації про ваш хост не будуть видимі для потенційних хакерів.
NOTE: The keys of the array elements to be hidden are case-insensitive
Handlers
In order to catch exceptions and low severity errors, Phalcon\Support\Debug makes use of onUncaughtException() and onUncaughtLowSeverity(). Більшість розробників, які використовують цей компонент, ніколи не потребують розширення цих методів. Проте, якщо ви хочете, то можете це зробити, розширивши компонент і перевизначивши ці методи, щоб маніпулювати винятком та отримати потрібний результат.
These two methods are being set as exception handlers using PHP’s set_exception_handler. При виклику listenExceptions() зареєструється oncaughtException(), тоді як виклик listenLowSeverity() зареєструє oncaughtLowSeverity.
Відображення та самоаналіз
Phalcon classes do not differ from any other PHP classes, and therefore you can use the Reflection API or simply print any object to display its contents and state:
Xdebug is an amazing tool that complements the debugging of PHP applications. Це також розширення C для PHP, і ви можете використовувати його разом з Phalcon без додаткової конфігурації чи побічних ефектів.
Після встановлення Xdebug ви можете використовувати його API, щоб отримати більш детальну інформацію про винятки і повідомлення.
NOTE: We highly recommend using the latest version of Xdebug for a better compatibility with Phalcon
The following example implements xdebug_print_function_stack to stop the execution and generate a backtrace:
<?phpusePhalcon\Mvc\Controller;classSignupControllerextendsController{publicfunctionindexAction(){}publicfunctionregisterAction(){$name=$this->request->getPost('name','string');$email=$this->request->getPost('email','email');// Stop execution and show a backtracereturnxdebug_print_function_stack('stop here!');$user=newUsers();$user->name=$name;$user->email=$email;// Store and check for errors$user->save();}}
Xdebug у вище наведеному прикладі покаже нам змінні в локальній області, а також дані зворотного трасування:
Xdebug: stop here! in /app/app/controllers/SignupController.php
on line 19
Call Stack:
0.0383 654600 1. {main}() /app//public/index.php:0
0.0392 663864 2. Phalcon\Mvc\Application->handle()
/app/public/index.php:37
0.0418 738848 3. SignupController->registerAction()
/app/public/index.php:0
0.0419 740144 4. xdebug_print_function_stack()
/app/app/controllers/SignupController.php:19
Xdebug пропонує декілька способів для отримання інформації налагодження та зворотного трасування стосовно виконання вашої програми за допомогою Phalcon. You can check the XDebug documentation for more information.
To set up Xdebug for PHPStorm you can check this article.