Публикации - Laravel

Структура и жизненный цикл фрэймворка

Серверный конфигурационный файл (Apache или Ngingx) должен перенаправить запрос в папку /public.

Соответственно, точка входа для всех запросов фрэймворка начинается с файла public/index.php. Данный файл не содержит много кода. Основная его задача – загрузка необходимых файлов: autoload.php и bootstrap/app.php. А также дальнейшее перенаправление запроса.

Далее входящий запрос, в зависимости от типа, отправляется либо в модуль, обрабатывающий консольные команды (консольное ядро), либо в ядро фрэймворка, обрабатывающее http-запросы.

Сосредоточимся на ядре HTTP, который находится по адресу app/Http/Kernel.php. Данный файл является расширением класса Illuminate\Foundation\Http\Kernel (ядра фрэймворка). Ядро фрэймворка можно представить в виде большого черного ящика, который обрабатывает запросы, а также определяет перечень промежуточного программного обеспечения (специальных классов наследуемых от класса middleware), которые должен пройти фрэймворк прежде чем выдаст ответ.

Далее загружаются поставшики услуг для приложения (servise providers). Все поставщики услуг по применению настроены в массиве провайдеров конфигурационного файла config/app.php. Далее метод register() определяет необхоимые классы поставщиков услуг. Если некоторые поставщики услуг необходимо запустить сразу, то это можно выполнить в методе boot().

Сервис-провайдеры несут ответственность за все компоненты по фреймворку, такие как компоненты базы данных, очереди, проверки и маршрутизации. Так как через них можно настроить и загрузить все функции, предлагаемые фрэймворком, поставщики услуг являются наиболее важным аспектом всего процесса начальной загрузки Laravel.

И только после того, как все поставщики услуг были зарегистированы (или сразу выполнены методом boot()), запрос попадает в маршрутизатор. Маршрутизатор, как правило, отправляет запрос в какой-либо из контроллеров.

На этом запрос обработан, и в контроллере должен быть прописан ответ фрэймворка. Кстати, если ответ ожидается коротким, то можно обойтись без контроллера: ответы фрэймворка можно писать сразу в маршрутизаторе.

Есть много отклонений и различных вариантов путей запроса, но неизменно путь проходит три опорные точки, на которые надо обратить внимание:

1. Маршруты - routes

2. Контроллеры - app/http/controllers/

3. Промежуточное программное обеспечение, или middleware - app/middleware

4. Провайдеры - app/providers/

5. Отображения (виды) - resources/views/

Фрэймворк Laravel предоставляет структуру файлов и папок в соответствии с архитектурным шаблоном проектирования HMVC. Рассмотрим ключевые дирректории фрэймворка, которые не только созданы с учетем архитектурного шаблона HMVC, но и расширяют его возможности. Вот краткое описание этих дирректорий.

app/

Все рабочие файлы, за исключением файлов ресурсов, живут в папке app/.

Главная рабочая папка всего фрэймворка. По умолчанию, это папка в пространстве имен App. Пространство имен можно изменить, используя artisan команду app:name.

php artisan app:name SocialNet

Дирректория app/ содержит следующие папки: Console/, Exceptions/, Handlers/, Http/ и Providers/, Models/.

Каталог Console содержит классы консольных команд.

Каталог Exceptions содержит классы обработчики исключений.

Каталог Http содержит все фильтры, контроллеры, а также классы валидации request-запросов.

Каталог Providers предназначен для вспомогательных классов.

bootstrap/

Папка для конфигурационных файлов автозагрузки.

config/

Папка конфигурационных файлов.

database/

В папке database находятся папка migrations (для файлов миграций баз данных), seeds (для классов предворительной загрузки данных) и factories (фабрики).

public/

Корневая папка проекта. В этой папке находится файл index.php и .htaccess, которые загружаются первыми, а также папки медиа-файлов (css, js, изображения и др.)

resources/

Рабочая дирректория для ресурсов приложения, содержит следующие папки: assets/ views/.

Каталог views/ предназначен для html-шаблонов (элементов представлений).

Каталог assets/ предназначен для файлов предпроцессорных клиентских языков программирования, таких как CoffeScript, Less, Sass и других.

Каталог lang/ предназначен для файлов переводов.

lang/ папка для языковых ресурсов

routes/

Папка для маршрутов приложения. Основные маршруты описываются в файле web.php.

storage/

Папка для хранения временных файлов, создаваемых фрэймворком.

Папки внутри storage должны быть доступны веб-серверу для записи. Если вы устанавливаете фреймворк на Linux или MacOS, необходимо открыть доступ к этой папке.

tests/

Папка содержит файлы автоматических тестов.

vendor/

Папка содержит composer – зависимости. По сути, папка vendor/ - это единственная неприкосновенная папка фрэймворка, т.к. здесь находятся внешние зависимости проекта.

Корневые файлы проекта

vite.config.js - файл настроек сборщика модулей.

package.json - файл настроек менеджера зависимостей npm (для node.js).

phpunit.xml - конфигурационный xml-файл для PHPUnit.

composer.json - файл настроек менеджера зависимостей composer (для PHP).

composer.lock - вспомогательный файл для composer.

artisan - интерфейс командной строки для создания компонентов приложения (таких как controllers, models, providers, middleware, listeners и других) и управления приложением.

readme.md - файл для описания проекта на github.com.

.env - файл настроек, в том числе и подключения к базе данных

env.example - вспомгательный файл для .env. Сюда можно переносить общие подключения, например для localhost

вспомогательные файлы для системы контроля версий git

Жизненный цикл фрэймворка

Точка входа для всех запросов фрэймворка начинается с файла index.php. Данный файл не содержит много кода. Основная его задача – загрузка необходимых файлов: autoload.php и app.php. А также дальнейшее перенаправление запроса.

Далее входящий запрос, в зависимости от типа запроса, отправляется либо в модуль, обрабатывающий консольные команды (консольное ядро), либо в ядро фрэймворка, обрабатывающее http-запросы.

Сосредоточимся на ядре HTTP, который находится по адресу app/Http/Kernel.php. Данный файл является расширением класса Illuminate\Foundation\Http\Kernel (ядра фрэймворка). Ядро фрэймворка можно представить в виде большого черного ящика, который обрабатывает запросы, а также определяет перечень промежуточного программного обеспечения (специальных классов наследуемых от класса middleware), которые должен пройти фрэймворк прежде чем выдаст ответ.

Далее загружаются поставшики услуг для приложения (servise providers). Все поставщики услуг по применению настроены в массиве провайдеров конфигурационного файла config/app.php. Далее метод register() определяет необхоимые классы поставщиков услуг. Если некоторые поставщики услуг необходимо запустить сразу, то это можно выполнить в методе boot().

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. Подключение CKEditor https://artisansweb.net/install-use-ckeditor-laravel/#comments
2. Регистрация и авторизация https://know-online.com/post/laravel-reg
3. Что нового в Laravel 8 https://sergeymukhin.com/blog/chto-novogo-v-laravel-80
4. Авторизация Sanctum <iframe width="560" height="315" src="https://www.youtube.com/embed/MT-GJQIY3EU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>