73 lines
6.2 KiB
Markdown
73 lines
6.2 KiB
Markdown
|
# Порядок выполнения
|
|||
|
|
|||
|
Каждое приложение выполняется в следующем порядке:
|
|||
|
|
|||
|
1. Старт приложения из `index.php`
|
|||
|
2. Установка путей для application, module, и system.
|
|||
|
3. Установка уровня Error reporting.
|
|||
|
4. Загружается файл установки, если таковой имеется.
|
|||
|
5. Загружается класс [Kohana].
|
|||
|
6. Подключение `APPPATH/bootstrap.php`
|
|||
|
7. Вызывается [Kohana::init], который устанавливает обработку ошибок, кэширование и логирование.
|
|||
|
8. Подгружаются [Kohana_Config] и [Kohana_Log].
|
|||
|
9. Вызывается [Kohana::modules] для активации дополнительных модулей.
|
|||
|
* Информация о пути к модулям добавляется в [каскадную файловую систему](about.filesystem).
|
|||
|
* Если находится, подгружается файл `init.php` модуля.
|
|||
|
* Файл `init.php` производит дополнительную настройку окружения, включая добавление маршрутов.
|
|||
|
10. Несколько раз вызывается [Route::set], чтобы определить все [маршруты](using.routing) приложения.
|
|||
|
11. Вызывается [Request::instance], чтобы начать обработку выполнения.
|
|||
|
1. Проверяет все маршруты, пока не найдёт совпадения с вызываемым.
|
|||
|
2. Создаёт инстанс контроллера и передаёт ему запрос.
|
|||
|
3. Вызывает метод [Controller::before].
|
|||
|
4. Вызывает действие контроллера, которое генерирует ответа на запрос.
|
|||
|
5. Вызывает метод [Controller::after].
|
|||
|
* Предыдущие 5 шагов могут быть вызваны несколько раз при использовании [HMVC подзапросов](about.mvc).
|
|||
|
12. Отображается результат ответа на запрос ([Request]).
|
|||
|
|
|||
|
## index.php
|
|||
|
|
|||
|
Kohana использует в работе паттерн [front controller], что означает, что все запросы направляются на `index.php`. Это позволяет использовать понятный и прозрачный дизайн [файловой системы](about.filesystem). `index.php` содержит лишь основные возможные конфигурационные свойства. Вы лишь можете изменить `$application`, `$modules`, и `$system` пути и выставить уровень оповещения об ошибках.
|
|||
|
|
|||
|
Переменная `$application` позволяет определить директорию, которая содержит файлы Вашего приложения. По-умолчанию - это `application`. Переменная `$modules`, соответственно, указывает на директорию с файлами модулей, а `$system` - директорию с файлами ядра Kohana.
|
|||
|
|
|||
|
Вы можете переместить эти директории куда угодно. Например, если Вы имеете такую структуру каталогов:
|
|||
|
|
|||
|
www/
|
|||
|
index.php
|
|||
|
application/
|
|||
|
modules/
|
|||
|
system/
|
|||
|
|
|||
|
То можете переместить директории на уровень выше корня web папки:
|
|||
|
|
|||
|
application/
|
|||
|
modules/
|
|||
|
system/
|
|||
|
www/
|
|||
|
index.php
|
|||
|
|
|||
|
После этого нужно привести установки в `index.php` к следующему виду:
|
|||
|
|
|||
|
$application = '../application';
|
|||
|
$modules = '../modules';
|
|||
|
$system = '../system';
|
|||
|
|
|||
|
Теперь ни один из каталогов не может быть напрямую доступен для web сервера. Совсем не обязательно производить эти изменения, но, помимо прочего, это может быть полезно при использовании одного набора директорий среди множества приложений.
|
|||
|
|
|||
|
[!!] В начале всех файлов Kohana присутствует проверка безопасности, дабы предотвратить доступ до файла без использования front контроллера. Однако, более безопасно разместить application, modules, и system директории таким образом, чтобы они были недоступны извне.
|
|||
|
|
|||
|
### Сообщения об ошибках
|
|||
|
|
|||
|
По-умолчанию, Kohana отображает все ошибки, включая strict mode предупреждения. Это устанавливается, используя [error_reporting](http://php.net/error_reporting):
|
|||
|
|
|||
|
error_reporting(E_ALL | E_STRICT);
|
|||
|
|
|||
|
Когда Ваше приложение опубликовывается в продуктив, то рекомендуется использовать более консервативные настройки, такие как игнорирование уведомлений:
|
|||
|
|
|||
|
error_reporting(E_ALL & ~E_NOTICE);
|
|||
|
|
|||
|
Если Вы получаете белый экран при ошибке, то это означает, что Ваш сервер имеет отключённое свойство отображение ошибок. Вы можете включить его, добавив эти строчки сразу после вызова `error_reporting`:
|
|||
|
|
|||
|
ini_set('display_errors', TRUE);
|
|||
|
|
|||
|
Ошибки должны **всегда** отображаться, даже в продуктиве, так как это позволяет использовать [исключения и обработку ошибок](debugging.errors), чтобы выдавать симпатичную страничку с ошибкой, нежели дезориентирующий белый экран.
|