Структура каталогов Laravel
Структура Laravel
по умолчанию — подходит как для больших, так и для маленьких приложений. Можно свободно организовать структуру приложения как пожелаете. Laravel не накладывает практически никаких ограничений на то, где будет размещён какой-либо класс, пока Composer
будет в состоянии автоматически загружать этот класс.
В Laravel
отсутствует в корне каталог models
. Модели перенесины в каталог app
.
Корневой каталог
Каталог app
содержит основной код приложения, почти все классы в приложении будут в этом каталоге.
Каталог bootstrap
содержит файл app.php
, который загружает фреймворк. В этом каталоге также находится каталог cache
, содержащий файлы сгенерированные фреймворком для оптимизации производительности, например файлы кеша маршрутов и служб. Обычно вам не нужно изменять какие-либо файлы в этом каталоге.
Каталог config
, как следует из названия, содержит все файлы конфигурации вашего приложения.
Каталог database
содержит миграции ваших баз данных, фабрики моделей и наполнители.
Каталог public
содержит файл index.php
, который является точкой входа для всех запросов, поступающих в ваше приложение, и конфигурирует автозагрузку. В этом каталоге также находятся ваши ресурсы, например, изображения, JavaScript и CSS.
Каталог resources
содержит ваши шаблоны, а также ваши необработанные, нескомпилированные ресурсы, например, JavaScript или CSS. В этом каталоге также находятся все ваши языковые файлы.
Каталог routes
содержит все определения маршрутов для вашего приложения. По умолчанию в Laravel входит несколько файлов маршрутов: web.php
, api.php
, console.php
и channels.php
.
Файл web.php
содержит маршруты, которые RouteServiceProvider
размещает в группе посредников web
, обеспечивающие состояние сессии, защиту CSRF и шифрование файлов куки. Если в вашем приложении не предполагается сохранение состояния и RESTful API, то, скорее всего, все ваши маршруты будут определены в файле web.php
.
Файл api.php
содержит маршруты, которые RouteServiceProvider
размещает в группе посредников api
. Эти маршруты не предполагают сохранения состояния, поэтому запросы, поступающие в приложение через эти маршруты, предназначены для аутентификации с помощью токенов и не имеют доступа к состоянию сессии.
В файле console.php
вы можете определить все ваши анонимные консольные команды. Каждое замыкание привязано к экземпляру команды, что обеспечивает простой подход к взаимодействию с методами ввода-вывода каждой команды. Несмотря на то, что этот файл не определяет маршруты HTTP, он определяет точки входа (маршруты) в ваше консольное приложение.
В файле channels.php
вы можете зарегистрировать все каналы трансляции событий, которые поддерживает ваше приложение.
Каталог storage
содержит ваши журналы (логи), скомпилированные шаблоны Blade, файлы сессий, кеша и другие файлы, созданные фреймворком. Этот каталог разделен на каталоги app
, framework
, и logs
. Каталог app
может использоваться для хранения любых файлов, созданных вашим приложением. Каталог framework
используется для хранения файлов и кешей, сгенерированных фреймворком. Наконец, каталог logs
содержит файлы журнала вашего приложения.
Каталог storage/app/public
может использоваться для хранения файлов, созданных пользователями, таких как аватары профиля, которые должны быть общедоступными. Вы должны создать символическую ссылку (ярлык) в public/storage
, которая указывает на этот каталог. Вы можете создать ссылку, используя команду php artisan storage:link
Artisan.
Каталог tests
содержит ваши автоматизированные тесты. Примеры модульного PHPUnit и функционального тестов предоставляются из коробки. Каждый тестовый класс должен иметь суффикс Test
. Вы можете запускать свои тесты с помощью команд phpunit
или php vendor/bin/phpunit
. Или, если вы хотите более подробное и красивое отображение результатов ваших тестов, вы можете запускать свои тесты с помощью команды php artisan test
Artisan.
Каталог vendor
содержит ваши Composer
зависимости.
Каталог пространства App
Большая часть вашего приложения находится в каталоге app
. По умолчанию этот каталог находится в пространстве имен App
и автоматически загружается Composer.
Каталог app
содержит множество дополнительных каталогов, например, имеющих пространство Console
, Http
, и Providers
. Думайте о каталогах Console
и Http
как о API-проводнике ядра вашего приложения. Протокол HTTP и интерфейс командной строки являются механизмами взаимодействия с вашим приложением, но фактически не содержат логики приложения. Другими словами – это два способа передачи команд вашему приложению. Каталог Console
содержит все ваши Artisan-команды
, тогда как каталог Http
содержит контроллеры, посредники и запросы.
Множество других каталогов будет создано внутри каталога app
, когда вы будете использовать команды make
Artisan для создания классов. Так, например, каталог app/Jobs
не будет существовать, пока вы не выполните команду make:job
Artisan для создания класса задания.
Многие классы в каталоге app
могут быть созданы с помощью команд Artisan
. Чтобы просмотреть доступные команды, выполните команду php artisan list make
в консоли.
Каталог Broadcasting
содержит все классы широковещательных каналов для вашего приложения. Эти классы генерируются с помощью команды make:channel
. Этот каталог не существует по умолчанию, но будет создан для вас, когда вы создадите свой первый канал. Чтобы узнать больше о каналах, ознакомьтесь с документацией по трансляции событий.
Каталог Console
содержит все ваши Artisan-команды
приложения. Эти команды могут быть созданы с помощью команды make:command
. В этом каталоге также находится ядро вашей консоли, в котором регистрируются ваши пользовательские команды Artisan и определены ваши запланированные задачи.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команды event:generate
или make:event
Artisan. В каталоге Events
находятся классы событий. События могут использоваться для предупреждения других частей вашего приложения о том, что произошло определенное действие, обеспечивая большую гибкость.
Каталог Exceptions
содержит обработчик исключений вашего приложения, а также является хорошим местом для размещения любых исключений, генерируемых вашим приложением. Если вы хотите скорректировать как ваши исключения будут отображаться или записываться в журнал, вам следует изменить класс Handler
в этом каталоге.
Каталог Http
содержит ваши контроллеры, посредники и запросы форм. Практически вся логика обработки запросов, поступающих в ваше приложение, будет размещена в этом каталоге.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команду make:job
Artisan. В каталоге Jobs
находятся планировщики заданий вашего приложения. Задания могут быть поставлены в очередь вашим приложением или выполняться синхронно в рамках жизненного цикла текущего запроса. Задания, которые выполняются синхронно во время текущего запроса, иногда называют «командами», поскольку они являются реализацией шаблона команды.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команды event:generate
или make:listener
Artisan. Каталог Listeners
содержит классы, которые обрабатывают ваши события. Слушатели событий получают экземпляр события и выполняют логику в ответ на запускаемое событие. Например, событие UserRegistered
может обрабатываться слушателем SendWelcomeEmail
.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команду make:mail
Artisan. Каталог Mail
содержит все ваши классы для работы с электронными письмами, отправляемыми вашим приложением. Почтовые объекты позволяют вам инкапсулировать всю логику создания электронной почты в один простой класс, который может быть отправлен с помощью метода Mail::send
.
Каталог Models
содержит все ваши классы моделей Eloquent. Laravel содержит библиотеку Eloquent ORM, предоставляющую красивую и простую реализацию ActiveRecord для работы с вашей базой данных. Каждая таблица базы данных имеет соответствующую «Модель», которая используется для взаимодействия с этой таблицей. Модели позволяют запрашивать данные в таблицах, а также вставлять новые записи в таблицу.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команду make:notification
Artisan. Каталог Notifications
содержит все «транзакционные» уведомления, которые отправляются вашим приложением. Например, простые уведомления о событиях, которые происходят в вашем приложении. Уведомления Laravel позволяют абстрагироваться от отправки уведомлений по различным драйверам, таким как электронная почта, Slack, SMS, или сохранение в базе данных.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команду make:policy
Artisan. Каталог Policies
содержит классы политик авторизации вашего приложения. Политики используются для определения того, может ли пользователь выполнить определенное действие с ресурсом.
Каталог Providers
содержит всех поставщиков служб вашего приложения. Поставщики служб загружают ваше приложение, связывая службы в контейнере служб, регистрируя события или выполняя любые другие задачи для подготовки вашего приложения к входящим запросам.
В новом приложении Laravel этот каталог уже будет содержать несколько провайдеров. При необходимости вы можете добавить свои собственные провайдеры в этот каталог.
Этот каталог не существует по умолчанию, но будет создан для вас, если вы выполните команду make:rule
Artisan. Каталог Rules
содержит пользовательские объекты правил валидации вашего приложения. Правила используются для инкапсуляции сложной логики проверки в простой объект. Для получения дополнительной информации ознакомьтесь с документацией по валидации.