Основы 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
содержит настраиваемые объекты правил валидации для вашего приложения. Правила используются для инкапсуляции сложной логики проверки в простой объект. Для получения дополнительной информации ознакомьтесь с документацией по валидации.