Цель этой главы - предоставить общие понимание внутреней работы фреймворка. Получив эти знания, вы будете более уверено создавать свои приложения. Если вы не понимаете все термины, не отчаивайтесь, просто попытайтесь получить общее представление о работе фреймворка, и ваши знания будут расти по мере изучения других разделов документации.
Точкой входа для всех запросов является файл public/index.php. Все запросы вашего веб сервера (Nginx/Apache) должны быть направлены в этот файл. Файл index.php содержит небольшое количество кода, т.к. является отправной точкой для загрузки остальной части фреймворка.
Файл index.php загружает автозагрузчик Composer, а затем извлекает экземпляр приложения Imhotep из bootstrap/app.js. Первым делом, Imhotep создает экземпляр приложения / Service Container.
Далее, все запросы отправляется либо в ядро HTTP app/Http/Kernel.php, либо в ядро Console app/Console/Kernel.php, в зависимости от типа запроса поступающего в приложение.
Ядро HTTP расположенное в app/Http/Kernel.php расширяет базовый класс Imhotep\Framework\Http\Kernel.php в котором определен массив загрузчиков $bootstrappers, которые будут запущены до выполнения запроса. Эти загрузчики настраивают обработку ошибок, логирование, загружают конфигурацию и выполняют другие задачи необходимые до начала обработки запроса. Обычно, эти классы обрабатывают внутреннию конфигурацию Imhotep, о которой вам не нужно беспокоиться.
Ядро HTTP определяет список middleware, через которые должны пройти все запросы, прежде чем они будут переданы дальше. Данные middleware могут обрабатывать HTTP сессии, проверять CSRF токен и многое другое.
Сигнатура метода handle в HTTP ядре довольно проста: получить Request и вернуть Response. Думайте о ядре как о большом черном ящике, представляющем все ваше приложение. Отправьте ему HTTP-запрос и он вернет HTTP-ответ.
Одним из наиболее важных действий при начальной загрузке ядра, является загрузка поставщиков услуг (service providers). Они отвечают за работу различных компоненов фреймворка, таких как база данных, маршрутизация, кеширование и другое. Все service providers вашего приложения настраиваются в конфигурационном файле config/app.php, массив providers.
Imhotep будет переберет массив providers и для каждого создат экземпляр, после чего у всех будет вызван метод register. Затем, когда все service providers будет зарегистрированы, у каждого будет вызван метод boot. Это необходимо, что бы до вызова метода boot все service providers смогли зарегистрировать в service container собственные привязки из массивов bindings, singletons, aliases.
Главным образом, каждая основная функция предлагаемая Imhotep, загружается и настраивается в service provider, поэтому они являются важным элементом фреймворка.
Одним из очень важных service providers в вашем приложении является app/Providers/RouteServiceProvider.php. Он загружает файлы из папки routes содержащие маршрутизацию вашего приложения.
Когда приложение произвела первоначальную загрузку и зарегистрировала все service providers, Request будет отправлен на маршрутизатор (router) для отправки (dispatch). Маршрутизатор отправит запрос на выполнение, а так же запустит необходимое middleware для указанного маршрута.
Middleware предоставляют удобный механизм фильтрации или проверки HTTP запроса при входе в ваше приложение. Для примера, если пользовать не аутентифицирован, то middleware перенаправить пользователя на страницу входа и завершит запрос. Некоторые middleware назначаются для всех маршрутов в приложении, они определены в свойстве $middleware, но можно назначить определенные на конкретные маршрут или группу маршрутов. Вы можете узнать больше, прочитав полную документацию о middleware.
Если запрос успешно прошел через все назначенные middleware, метод маршрута/контроллера будет выполнен, а ответ возвращенный методом маршрута/контроллера будет отправлен обратно через всю цепочку middleware, предоставив приложению возможность изменить или проверить исходящий ответ.
Когда Response возвращается через middleware, метод handle в Http Kernel возвращает объект Response в файле index.php в котором вызывается метод send завершающий отправку результата. Метод send отправляет содержимое ответа в браузер пользователя.
Service providers являются ключем к начальной загрузке приложения Imhotep. Создание экземпляра приложения, регистрация service providers и обработка запроса загруженным приложением. Это действительно просто!
Полное понимание того, как приложения Imhotep создается и загружается через service providres, очень важно! Service providers вашего приложения хранятся в каталоге app/Providers.
По умолчанию AppServiceProvider практически пуст. Этот провайдер отличное место для добавления собственных bootstrapping и service container bindings. Для большого приложения вы можете создавать отдельные service providers, каждый из которых будет выполнять более узку здачу вашего приложения.