Входные скрипты =============== Входные скрипты это первое звено в процессе начальной загрузки приложения. Приложение (веб приложение или консольное приложение) включает единый входной скрипт. Конечные пользователи делают запросы к входному скрипту, который создает объекты приложения и перенаправляет запрос к ним. Входные скрипты для веб приложений должны быть сохранены в папках, доступных из веб, таким образом они могут быть доступны конечным пользователям. Такие скрипты обычно именуются `index.php`, но так же могут использовать другие имена, которые могут быть распознаны используемыми веб-серверами. Входные скрипты для консольных приложений обычно расположены в [базовой папке](structure-applications.md) приложений и имеют название `yii` (с суффиксом `.php`). Они должны иметь права на выполнение, таким образом пользователи смогут запускать консольные приложения через команду `./yii <маршрут> [аргументы] [опции]`. Входные скрипты в основном делают следующую работу: * Объявляют глобальные константы; * Регистрируют загрузчик классов [Composer](http://getcomposer.org/doc/01-basic-usage.md#autoloading); * Подключают файл класса [[Yii]]; * Загружают конфигурацию приложения; * Создают и конфигурируют объект [приложения](structure-applications.md); * Вызывают метод [[yii\base\Application::run()]] приложения для обработки входящего запроса. ## Веб приложения <a name="web-applications"></a> Ниже представлен код входного скрипта для [базового шаблона приложения](start-installation.md). ```php <?php defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); // регистрация загрузчика классов Composer require(__DIR__ . '/../vendor/autoload.php'); // подключение файла класса Yii require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); // загрузка конфигурации приложения $config = require(__DIR__ . '/../config/web.php'); // создание и конфигурация приложения, а также вызов метода для обработки входящего запроса (new yii\web\Application($config))->run(); ``` ## Консольные приложения <a name="console-applications"></a> Ниже представлен аналогичный код входного скрипта консольного приложения: ```php #!/usr/bin/env php <?php /** * Yii console bootstrap file. * * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ defined('YII_DEBUG') or define('YII_DEBUG', true); // fcgi не имеет констант STDIN и STDOUT, они определяются по умолчанию defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); // регистрация загрузчика классов Composer require(__DIR__ . '/vendor/autoload.php'); // подключение файла класса Yii require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php'); // загрузка конфигурации приложения $config = require(__DIR__ . '/config/console.php'); $application = new yii\console\Application($config); $exitCode = $application->run(); exit($exitCode); ``` ## Объявление констант <a name="defining-constants"></a> Входные скрипты являются наилучшим местом для объявления глобальных констант. Yii поддерживают следующие три константы: * `YII_DEBUG`: указывает работает ли приложение в отладочном режиме. Находясь в отладочном режиме, приложение будет собирать больше информации в логи и покажет детальный стек вызовов если возникнет исключение. По этой причине, отладочный режим должен быть использован только в процессе разработки. По-умолчанию значение `YII_DEBUG` равно false; * `YII_ENV`: указывает в каком окружении запущено приложение. Данная тема подробно описана в разделе [Конфигурации](concept-configurations.md#environment-constants). По-умолчанию значение `YII_ENV` равно `'prod'`, означающие, что приложение запущено в производственном режиме; * `YII_ENABLE_ERROR_HANDLER`: указывает нужно ли включать имеющийся в Yii обработчик ошибок. По-умолчанию значение данной константы равно true. При определении константы, мы обычно используем следующий код: ```php defined('YII_DEBUG') or define('YII_DEBUG', true); ``` который равнозначен коду, приведенному ниже: ```php if (!defined('YII_DEBUG')) { define('YII_DEBUG', true); } ``` Первый способ является более кратким и понятным. Константы должны быть определены как можно раньше, в самом начале входного скрипта, таким образом они могут оказать влияние, когда остальные PHP файлы будут подключены.