Основы Laravel: Структура каталогов приложения

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

Но вы можете организовать своё приложение так, как вам нравится. Laravel почти не накладывает ограничений на то, где находится тот или иной класс, пока Composer может автоматически загружать класс.

Корневой каталог приложения Laravel

Это каталог в который вы развернули приложение с помощью Composer, установщика laravel или из GitHub репозитория laravel/laravel.

Каталог app

Каталог app содержит основной код вашего Laravel приложения. Вскоре мы рассмотрим этот каталог более подробно; однако почти все классы вашего приложения будут находиться в этом каталоге.

Каталог bootstrap

Изначально каталог содержит только файл app.php загружающий фреймворк. В этом каталоге также расположен каталог cache, содержащий созданные фреймворком файлы для оптимизации производительности, такие как файлы кэша маршрутов и сервисов. Обычно вам не нужно изменять какие-либо файлы в этом каталоге.

Каталог config

Каталог config, как следует из названия, содержит все файлы конфигурации вашего приложения. Это отличная идея, прочитать эти файлы и ознакомиться со всеми доступными вариантами.

Каталог database

Каталог database содержит миграции вашей базы данных, фабрики моделей и данные для заполнения. При желании вы можете использовать этот каталог для хранения базы данный SQLite.

Каталог public

Каталог public содержит index.php, являющийся точкой входа для всех запросов, поступающих в приложение, и настраивает автозагрузку. В этом каталоге так же хранятся ресурсы, такие как изображения, JavaScript и CSS.

Каталог resources

Каталог resources содержит представления (view), а также исходные, не скомпилированные ресурсы, такие как CSS или JavaScript.

Каталог routes

Каталог routes содержит все определения маршрутов для приложения laravel. По умолчанию в Laravel включены несколько файлов маршрутов: web.php, api.php, console.php и channels.php.

Файл web.php содержит маршруты, которые RouteServiceProvider помещает в middleware группу web, обеспечивающую состояние сеанса, CSRF защиту и шифрование cookie файлов. Если ваше приложение не предлагает RESTful API без сохранения состояния, то ваши маршруты, скорее всего, будут определены в файле web.php

Файл api.php содержит маршруты, которые RouteServiceProvider помещает в middleware группу api. Эти маршруты предназначены для сохранения состояния, поэтому запросы, поступающие в приложение по этим маршрутам, предназначены для аутентификации через токены и не будут иметь доступ к состоянию сеанса.

В файле console.php вы можете определить все ваши консольные команды на основе замыканий. Каждое замыкание привязано к экземпляру команды, что обеспечивает простой подход к взаимодействию с методами ввода/вывода для каждой команды. Несмотря на то, что этот файл не определяет HTTP маршруты, он определяет точки входа (маршруты) консоли в вашем приложении.

В файле channels.php вы можете зарегистрировать все каналы трансляции событий, которые поддерживает ваше приложение.

Каталог storage

Каталог storage хранит ваши логи, скомпилированные шаблоны Blade, сеансы на основе файлов, файловые кэши и другие файлы созданные фреймворком. Этот каталог разделён на подкаталоги storage/app, storage/framework и storage/logs. Каталог storage/app может использоваться для хранения любых файлов, связанных с вашим приложением. Каталог storage/framework используется для хранения сгенерированных фреймворком файлов и кэшей. Наконец, каталог storage/log хранит файлы журналов (логи) вашего приложения.

Каталог storage/app/public может использоваться для хранения файлов, созданных пользователями, таких как аватары профилей, которые должны быть общедоступными. Вы должны создать символическую ссылку в public/storage, указывающую на этот каталог. Вы можете создать ссылку с помощью команды Artisan php artisan storage:link.

Каталог tests

Каталог tests содержит ваши автоматические тесты. Примеры модульных тестов PHPUnit и функциональных тестов предоставляются из коробки. Каждый тестовый класс должен иметь префикс Test. Вы можете запускать тесты с помощью команды phpunit или php vendor/bin/phpunit. Или, если вам нужно более подробное и красивое представление результатов вашего теста, вы можете запустить свои тесты с помощью команды Artisan php artisan test.

Каталог vendor

Каталог vendor хранит ваши зависимости Composer.

Каталог приложения app/

Большая часть вашего приложения находится в каталоге app. По умолчанию этот каталог находится в пространстве имён App и автоматически загружается Composer с использованием стандарта автозагрузки PSR-4.

Каталог app содержит множество подкаталогов, таких как Console, Http и Providers. Думайте о каталогах Console и Http, как о представлении API в ядре вашего приложения. Протокол HTTP и интерфейс командной строки являются механизмами взаимодействия с приложением, но фактически не содержат логики приложения. Другими словами, это два способа подачи команд вашему приложению. Каталог Console содержит все ваши команды Artisan, а каталог Http содержит контроллеры, middleware и запросы.

Множество других каталогов будет создано внутри каталог app после использования команды Artisan make для генерации классов. Так, например, каталог app/Jobs не будет существовать, пока вы не выполните команду Artisan make:job для создания класса задания.

Множество классов в каталоге app могут быть созданы с помощью команд Artisan. Чтобы посмотреть доступные команды, запустите команду php artisan list make в своём терминале.

Каталог Broadcasting

Каталог Broadcasting содержит все классы широковещательных каналов вашего приложения. Эти классы генерируются командой make:channel. По умолчанию этого каталога не существует, но он будет создан, когда вы создадите первый канал. Больше информации о каналах можно получить в официальной документации по трансляциям событий.

Каталог Console

Каталог Console содержит все пользовательские команды Artisan для вашего приложения. Эти команды можно сгенерировать командой make:command. В этом каталоге также располагается ядро вашей консоли, где регистрируются пользовательские команды Artisan и определяются запланированные задачи.

Каталог Events

Этот каталог не существует по умолчанию, но он будет создан командами Artisan event:generate и make:event. Каталог Event содержит классы событий. События могут использоваться для оповещения других частей вашего приложения о том что данное действие произошло, обеспечивая большую гибкость и разделение.

Каталог Exceptions

Каталог Exceptions содержит обработчик исключений вашего приложения, а также является хорошим местом для размещения любых исключений, создаваемых вашим приложением. Если вы хотите настроить способ регистрации или отображения ваших исключений, вам следует изменить класс Handler в этом каталоге.

Каталог Http

Каталог Http содержит ваши контроллеры, middleware и запросы форм. Почти вся логика обработки запросов поступающих в ваше приложение, будет размещена в этом каталоге.

Каталог Jobs

Этот каталог не существует по умолчанию, но он будет создан, если выполнить команду Artisan make:job. В каталоге Jobs находятся поставленные в очередь задания вашего приложения. Задания могут быть поставлены в очередь вашим приложением или выполняться асинхронно в рамках текущего жизненного цикла запроса. Задания, которые выполняются синхронно во время текущего запроса, иногда называются командами, поскольку они являются реализация шаблона команды.

Каталог Listeners

Этот каталог не существует по умолчанию, но он будет создан после выполнения Artisan команды event:generate или make:listener. Каталог Listeners содержит классы, обрабатывающие ваши события. Слушатели событий получают экземпляр события и выполняют логику в ответ на запуск события. Например, событие UserRegistered может обрабатываться слушателем SendWelcomeEmail.

Каталог Mail

Этот каталог не существует по умолчанию, но он будет создан после выполнения команды Artisan make:mail. Каталог Mail содержит все классы отправляющие электронные письма вашим приложением. Объекты Mail позволяют инкапсулировать всю логику создания электронного письма в одном простом классе, которое можно отправить с помощью метода Mail::send.

Каталог Models

Каталог Models содержит все ваши классы Моделей Eloquent. Eloquent ORM, входящий в состав Laravel, представляет собой красивую и простую реализацию ActiveRecord для работы с базой данных. Каждая таблица базы данных имеет соответствующую Модель, используемую для взаимодействия с этой таблицей. Модели позволяют запрашивать данные в ваших таблицах, а также вставлять в таблицу новые записи.

Каталог Notifications

Этот каталог не существует по умолчанию, но он будет создан после выполнения команды Artisan make:notification. Каталог Notifications содержит все транзакционные уведомления, отправляемые приложением, например простые уведомления о событиях, происходящих в приложении. Функция уведомлений абстрагирует отправку уведомлений по различным драйверам, таким как электронная почта, slack, sms или хранится в базе данных.

Больше об уведомлениях можно узнать в статье Laravel: Погружение в Уведомления/Notifications

Каталог Policies

Этот каталог не существует по умолчанию, но он будет создан после выполнения команды Artisan make:policy. Каталог Policies содержит классы политик авторизации для вашего приложения. Политики используются для определения того, может ли пользователь выполнять данное действие с ресурсом.

Каталог Providers

Каталог Providers содержит всех сервис провайдеров для вашего приложения. Сервис провайдеры загружают ваше приложение, связывая службы в контейнере служб, регистрируя события или выполняя любые другие задачи для подготовки вашего приложения к входящим запросам.

В только что установленном Laravel приложении этот каталог уже будет содержать несколько провайдеров. Вы можете добавлять свои сервис провайдеры в этот каталог по мере необходимости.

Каталог Rules

Этот каталог по умолчанию не существует, но он будет создан после выполнения команды Artisan make:rule. Каталог Rules содержит настраиваемые объекты правил валидации для вашего приложения. Правила используются для инкапсуляции сложной логики проверки в простой объект. Для получения дополнительной информации ознакомьтесь с документацией по валидации.

Дополнительные материалы

Предыдущая Статья

Laravel: Советы и рекомендации по работе с HTTP клиентом

Следующая Статья

Архитектурная концепция Laravel: Жизненный цикл запроса