Версія фреймворка: 8.x

Запит життєвого циклу

Вступ

Використовуючи будь-який інструмент у "реальному світі", ви почуваєтесь більш впевнено, якщо розумієте, як цей інструмент працює. Розробка додатків нічим не відрізняється. Коли ви розумієте, як функціонують ваші засоби розробки, ви почуваєтесь більш комфортно та впевнено в їх використанні.

Мета цього документа - дати вам хороший огляд на високому рівні того, як працює фреймворк Laravel. Завдяки кращому знайомству із загальною структурою все стає менш «чарівним», і ви будете більш впевнено будувати свої програми. Якщо ви не зрозуміли всіх термінів відразу, не падайте духом! Просто спробуйте отримати базове уявлення про те, що відбувається, і ваші знання будуть зростати в міру вивчення інших розділів документації.

Огляд життєвого циклу

Перші речі

Точкою входу для всіх запитів до програми Laravel єpublic/index.phpфайл. Усі запити спрямовуються на цей файл за допомогою конфігурації вашого веб-сервера (Apache / Nginx).index.phpфайл не містить багато коду. Швидше, це відправна точка для завантаження решти фреймворку.

index.phpфайл завантажує згенероване композитором визначення автозавантажувача, а потім отримує екземпляр програми Laravel зbootstrap/app.php. Перша дія, яку вживає сам Laravel - це створення екземпляра програми /службовий контейнер.

Ядра HTTP / консолі

Далі вхідний запит надсилається або ядру HTTP, або ядру консолі, залежно від типу запиту, який надходить у програму. Ці два ядра служать центральним місцем, через яке проходять усі запити. Наразі зосередимося лише на ядрі HTTP, яке знаходиться вapp/Http/Kernel.php.

Ядро HTTP розширюєIlluminate\Foundation\Http\Kernelклас, який визначає масивbootstrappersщо буде запущено до виконання запиту. Ці завантажувачі налаштовують обробку помилок, налаштовують ведення журналу,виявити середовище програмита виконувати інші завдання, які потрібно виконати до того, як запит буде фактично оброблений.

Ядро HTTP також визначає список HTTPMiddlwareщо всі запити повинні пройти перед тим, як їх оброблятиме програма. Ці проміжні програми обробляють читання та записHTTP-сесія, визначаючи, чи перебуває програма в режимі обслуговування,перевірка маркера CSRF, і більше.

Підпис методу для ядра HTTPhandleметод досить простий: отримати aRequestі повернути aResponse. Подумайте про ядро ​​як про великий чорний ящик, який представляє весь ваш додаток. Надайте йому HTTP-запити, і він поверне відповіді HTTP.

Постачальники послуг

Однією з найважливіших дій завантаження ядра є завантаженняпостачальників послугдля вашої заявки. Усі постачальники послуг для програми налаштовані вconfig/app.phpфайли конфігураціїprovidersмасив. По-перше,registerметод буде застосовано до всіх провайдерів, тоді, як тільки всі провайдери будуть зареєстровані,bootбуде викликаний метод.

Постачальники послуг відповідають за завантаження всіх різних компонентів фреймворку, таких як база даних, черга, перевірка та компоненти маршрутизації. Оскільки вони завантажуються та налаштовують кожну функцію, запропоновану фреймворком, постачальники послуг є найважливішим аспектом усього процесу завантаження Laravel.

Запит на відправлення

Після завантаження програми та реєстрації всіх постачальників послуг,Requestбуде передано маршрутизатору для відправки. Маршрутизатор надішле запит до маршруту або контролера, а також запустить будь-яке Middlware, специфічне для маршруту.

Зосередьтеся на постачальниках послуг

Постачальники послуг - справді ключ до завантаження програми Laravel. Екземпляр програми створюється, постачальники послуг реєструються і запит передається завантаженій програмі. Це справді так просто!

Тверде розуміння того, як додаток Laravel будується та завантажується через постачальників послуг, є дуже цінним. Постачальники послуг вашої програми за замовчуванням зберігаються вapp/Providersкаталог.

За замовчуваннямAppServiceProviderдосить порожній. Цей постачальник - чудове місце, щоб додати власну програму завантаження та прив’язку контейнерів служб. Для великих програм ви можете створити декілька постачальників послуг, кожен із більш детального типу завантаження.