{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Введение == При использовании любого инструмента в "реальном мире" вы чувствуете больше уверенности, когда понимаете, как работает этот инструмент. Разработка приложений - не исключение. Когда вы понимаете, как функционируют ваши средства разработки, вы чувствуете себя более комфортно и уверенно. Задача этого документа состоит в том, чтобы дать вам хороший поверхностный обзор того, как "работает" фреймворк Laravel. Чем лучше вы знаете фреймворк, тем меньше в нём остаётся "волшебства", и вы более уверенно создаёте приложения. В дополнение к поверхностному обзору прохождения запроса мы рассмотрим старт-файлы и события приложения. Не отчаивайтесь, если не всё сразу поймёте! Постарайтесь просто получить базовое понимание того, что происходит, и ваши знания будут расти по мере изучения других разделов документации. %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) == Прохождение запроса == Все запросы в вашем приложении управляются через сценарий %%(t)public/index.php%%. При использовании Apache файл %%(t).htaccess%%, который поставляется с Laravel, обрабатывает передачу всех запросов в %%(t)index.php%%. С этого момента Laravel начинается процесс обработки запроса и возврата ответа клиенту. Будет полезно получить общее представление о процессе автозагрузки Laravel, поэтому сейчас рассмотрим это! Наиболее важным понятием при изучении процесса автозагрузки Laravel является **поставщик услуг**. Вы можете найти список поставщиков услуг в вашем конфигурационном файле %%(t)app/config/app.php%% в массиве %%(t)providers%%. Эти поставщики служат в качестве основного механизма автозагрузки для Laravel. Но прежде, чем мы окунёмся в поставщиков услуг, давайте вернёмся к %%(t)index.php%%. После того, как запрос попадёт в ваш файл %%(t)index.php%%, будет загружен файл %%(t)bootstrap/start.php%%. Этот файл создаёт новый объект Laravel %%Application%%, который также служит в качестве ((/docs/v4/ioc IoC-контейнера)). После создания объекта %%Application%%, будут заданы несколько путей проекта и будет выполнено ((/docs/v4/configuration#среда определение окружения)). Далее будет вызван внутренний сценарий автозагрузки Laravel. Этот файл находится глубоко внутри Laravel и задаёт ещё несколько настроек на основе ваших конфигурационных файлов, например, часовой пояс, сообщения об ошибках и т.д. Но кроме установки этих довольно тривиальных параметров конфигурации, он также делает кое-что очень важное: регистрирует всех поставщиков услуг, настроенных для вашего приложения. Простые поставщики услуг имеют только один метод - %%register()%%. Этот метод %%register()%% вызывается, когда поставщик услуг зарегистрирован с помощью объекта приложения через собственный метод %%register()%% приложения. В этом методе поставщик услуг регистрирует вещи с помощью ((/docs/v4/ioc IoC-контейнера)). По сути, каждый поставщик услуг привязывает одну или более ((http://us3.php.net/manual/en/functions.anonymous.php функцию-замыкание))) к контейнеру, что позволяет вам получать доступ к этим привязанным услугам в вашем приложении. Например, %%QueueServiceProvider%% регистрирует функции-замыкания, которые извлекают различные классы, связанные с ((/docs/v4/queues очередями)). Конечно поставщики услуг могут использоваться для любых задач автозагрузки, а не только для регистрации вещей в контейнерах IoC. Поставщик услуг может регистрировать обработчики событий, построители представлений, команды Artisan и многое другое. После того как все поставщики услуг зарегистрированы, будут загружены ваши файлы %%(t)app/start%%. Последним будет загружен ваш файл %%(t)app/routes.php%%. Когда файл %%(t)routes.php%% загружен, объект запроса отправляется в приложение, и может быть отправлен в маршрут. Давайте подытожим: 1. Запрос заходит в файл %%(t)public/index.php%%. 2. Файл %%(t)bootstrap/start.php%% создаёт приложение и определяет окружение. 3. Внутренний файл %%(t)framework/start.php%% устанавливает настройки и загружает поставщиков услуг. 4. Загружаются файлы приложения %%(t)app/start%%. 5. Загружаются файлы приложения %%(t)app/routes.php%%. 6. Объект запроса посылается в приложение, которое возвращает объект отклика. 7. Объект отклика посылается обратно клиенту. Теперь, когда вы хорошо представляете, как обрабатывается запрос в приложении Laravel, давайте поближе рассмотрим старт-файлы! %% == Старт-файлы == Файлы запуска, или //старт-файлы// вашего приложения хранятся в папке %%(t)app/start%%. По умолчанию создано три таких файла: %%(t)global.php%%, %%(t)local.php%% и %%(t)artisan.php%%. Для информации об %%(t)artisan.php%% см. ((docs/v4/artisan соответствующий раздел)). Файл **global.php** изначально содержит несколько начальных вызовов, таких как регистрация ((docs/v4/errors журнала)) и подключение %%(t)app/filters.php%%. Однако вы можете добавить сюда всё, что вам нужно. Этот файл автоматически выполняется при //каждом// запросе вне зависимости от ((docs/v4/configuration#сред+а))ы, в которой выполняется ваше приложение. Файл **local.php** вызывается только, когда приложение работает в среде %%(t)local%%. Больше информации о средах можно найти в ((docs/v4/configuration разделе о настройках)). Конечно, если у вас определены другие среды, кроме %%(t)local%%, вы можете создать старт-файлы для любой из них. Они будут автоматически загружаться, когда приложение работает в соответствующей среде. Например, если в вашем файле %%(t)bootstrap/start.php%% определена среда %%(t)development%%, то вы можете создать файл %%(t)app/start/development.php%%, который будет подключаться при поступлении в приложение любого запроса в этой среде. === Что помещать в старт-файлы === Старт-файлы служат в качестве простого места для размещения любого кода "автозагрузки". Например, вы можете зарегистрировать построитель представлений, настроить ведение логов, установить некоторые параметры PHP и т.д. Это полностью зависит от вас. Конечно, перемещение всего вашего кода автозагрузки в старт-файлы может привести к загромождению. Для больших приложений, или если вы чувствуете, что ваши старт-файлы загромождаются, задумайтесь о переносе некоторого кода автозагрузки в ((/docs/v4/ioc#поставщики поставщики услуг)). == События == **Регистрация обработчиков событий** Вы также можете делать пред- или пост-обработку запросов регистрируя обработчики для событий %%(t)before%%, %%(t)after%%, %%(t)finish%% и %%(t)shutdown%%: %%(php) App::before(function($request) { // }); App::after(function ($request, $response) { // }); %% Эти обработчики будут запущены соответственно до и после каждого вызова в вашем приложении. Эти события полезны для глобальной фильтрации и глобальной модификации откликов. Вы можете зарегистрировать их в одном из ваших старт-файлов или в ((/docs/v4/ioc#поставщики поставщике услуг)). %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) Вы также можете зарегистрировать обработчик для события %%(t)matched%%, которое срабатывает, когда входящий запрос соответствует ещё не выполненному маршруту: ~%% Route::matched(function($route, $request) { // }); ~%% Событие %%(t)finish%% вызывается после отправки отклика от вашего приложения обратно клиенту. Это хороший момент, чтобы сделать какие-либо окончательные действия, требуемые для вашего приложения. Событие %%(t)shutdown%% вызывается сразу после того, как все обработчики события %%(t)finish%% завершат работу, и это последняя возможность сделать какую-то работу, прежде чем сценарий завершится. Скорее всего, у вас не будет необходимости использовать эти события. %%