Структура каталога
11.x
.
Почему это важно?
Введение
Структура Laravel-приложения по умолчанию — отличная отправная точка как для больших, так и для маленьких приложений. Но, конечно, вы можете свободно организовать ваше приложение как пожелаете. Laravel не накладывает практически никаких ограничений на то, где будет размещён какой-либо класс, пока Composer будет в состоянии автоматически загружать этот класс.
Где каталог с моделями?
В начале изучения Laravel многие разработчики удивляются отсутствию каталога models
. Однако, это сделано специально. Мы считаем, что слово “модели” очень неопределённое, потому что оно означает совершенно разные вещи для разных людей. Для некоторых разработчиков “модель” приложения — это вообще вся бизнес-логика приложения, а для других “модели” — это классы, взаимодействующие с реляционной базой данных.
Поэтому мы решили поместить модели Eloquent в каталог app
и позволить разработчикам разместить их где-нибудь в другом месте, если они захотят.
Корневой каталог
Каталог App
Каталог app
, как вы можете догадаться, содержит код ядра вашего приложения . Ниже мы рассмотрим эту папку подробнее; однако, почти все классы вашего приложения будут находится в этой папке.
Каталог Bootstrap
Каталог bootstrap
содержит файлы, которые загружают фреймворк и настраивают автозагрузку. Также здесь содержится каталог cache
, который содержит сгенерированные фреймворком файлы для оптимизации производительности — например, кэш-файлы роутов и сервисов.
Каталог Config
Каталог config
, как гласит его название, содержит все конфигурационные файлы ваших приложений. Будет не лишним прочитать эти файлы и ознакомиться со всеми доступными параметрами.
Каталог Database
Каталог database
содержит миграции и классы для наполнения начальными данными вашей БД. При необходимости эту папку можно использовать для хранения базы данных SQLite.
Каталог Public
Каталог public
содержит файл index.php
, который является входной точкой для всех запросов, поступающих в ваше приложение. Также эта папка содержит ваши ресурсы, такие как изображения, JavaScript, CSS.
Каталог Resources
Каталог resources
содержит ваши шаблоны, а также “сырые”, некомпилированные ресурсы, такие как LESS, SASS, или JavaScript. А также здесь находятся все языковые файлы.
Каталог Routes
Каталог routes
содержит все определения роутов вашего приложения. По умолчанию в Laravel встроено несколько файлов роутов: web.php
, api.php
, console.php
и channels.php
.
Файл web.php
содержит роуты, которые RouteServiceProvider
помещает в группу посредников web
, которая обеспечивает состояние сессии, CSRF-защиту и шифрование cookie. Если ваше приложение не предоставляет не имеющий своего состояния RESTful API, то скорее всего все ваши роуты можно определить в файле web.php
.
Файл api.php
содержит роуты, которые RouteServiceProvider
помещает в группу посредников api
, которая обеспечивает ограничение скорости. Эти роуты должны быть не имеющими своего состояния, т.е. входящие через эти роуты запросы должны быть аутентифицированы с помощью токенов и они не будут иметь доступа к состоянию сессии.
Файл console.php
– то место, где вы можете определить все свои консольные команды на основе функций-замыканий. Каждая функция-замыкание привязывается к экземпляру команды, обеспечивая простое взаимодействие с методами ввода/вывода каждой команды. Несмотря на то, что в этом файле не определяются HTTP-роуты, в нём определяются консольные входные точки (пути) в ваше приложение.
Файл channels.php
– то место, где вы можете зарегистрировать все каналы вещания событий, поддерживаемые Вашим приложением.
Каталог Storage
Каталог storage
содержит скомпилированные Blade-шаблоны, файлы сессий, кэши файлов и другие файлы, создаваемые фреймворком. Этот каталог делится на подкаталоги app
, framework
и logs
. В каталоге app
можно хранить любые файлы, генерируемые вашим приложением. В каталоге framework
хранятся создаваемые фреймворком файлы и кэш. А в каталоге logs
находятся файлы журналов приложения.
Каталог storage/app/public
можно использовать для хранения пользовательских файлов, таких как аватары (юзерпики) пользователей и т.п. загруженные изображения, которые должны быть доступны всем. Вам надо создать символьную ссылку на public/storage
, которая ведёт к этому каталогу. Вы можете создать ссылку командой php artisan storage:link
.
Каталог Tests
Каталог tests
содержит ваши автотесты. Изначально там уже есть пример PHPUnit. Класс каждого теста должен иметь в имени суффикс Test
. Вы можете запускать свои тесты командами phpunit
или php vendor/bin/phpunit
.
Каталог Vendor
Каталог vendor
содержит ваши Composer-зависимости.
Каталог App
Основная часть вашего приложения находится в каталоге app
. По-умолчанию этот каталог зарегистрирован под пространством имён App
и автоматически загружается с помощью Composer по стандарту автозагрузки PSR-4.
В каталоге app
находится ряд дополнительных каталогов, таких как Console
, Http
и Providers
. Можно сказать, что каталоги Console
и Http
предоставляют API ядра вашего приложения. Протокол HTTP и командная строка — это механизмы взаимодействия с вашим приложением, но они не содержат логики приложения. Другими словами, это просто два способа передачи команд вашему приложению. Каталог Console
содержит все ваши Artisan-команды, а каталог Http
содержит ваши контроллеры, посредники и запросы.
Многие другие каталоги будут созданы в каталоге app
, когда вы выполните Artisan-команду make
для генерирования классов. Например, каталог app/Jobs
не будет создан, пока вы не выполните Artisan-команду make:job
, чтобы сгенерировать класс задачи.
Многие классы в каталоге
app
можно сгенерировать Artisan-командами. Для просмотра доступных команд выполните в терминале командуphp artisan list make
.
Каталог Console
Каталог Console
содержит все дополнительные Artisan-команды для вашего приложения. Эти команды можно сгенерировать командой make:command
. Также этот каталог содержит ядро вашей консоли, где регистрируются ваши дополнительные Artisan-команды и определяются ваши запланированные задачи.
Каталог Events
Изначально этого каталога нет, он создаётся Artisan-командами event:generate
и make:event
. В каталоге Events
, как можно догадаться, хранятся классы событий. События можно использовать для оповещения других частей приложения о каком-либо событии, что обеспечивает большую гибкость и модульность.
Каталог Exceptions
Каталог Exceptions
содержит обработчик исключений вашего приложения. Эта папка также является хорошим местом для размещения всех исключений, возникающих в вашем приложении. Если вы хотите изменить то, как журналируются и отображаются ваши исключения, вам надо изменить класс Handler
в данном каталоге.
Каталог Http
Каталог Http
содержит ваши контроллеры, посредники и запросы форм. Здесь будет размещена почти вся логика обработки запросов, входящих в приложение.
Каталог Jobs
Изначально этого каталога нет, он создаётся Artisan-командой make:job
. В каталоге Jobs
хранятся задачи для вашего приложения. Задачи могут быть обработаны вашим приложением в порядке очереди, а также их можно запустить синхронно в рамках прохождения текущего запроса. Иногда задачи, которые запускаются синхронно во время текущего запроса, называют “командами”, потому что они реализуют шаблон Команда.
Каталог Listeners
Изначально этого каталога нет, он создаётся Artisan-командами event:generate
или make:listener
. Каталог Listeners
содержит классы обработчиков для ваших событий. Слушатели событий получают экземпляр события и выполняют логику в ответ на это событие. Например, событие UserRegistered
может быть обработано слушателем SendWelcomeEmail
.
Каталог Mail
Изначально этого каталога нет, он создаётся Artisan-командой make:mail
. Каталог Mail
содержит все ваши классы, отвечающие за отправляемые вашим приложением email-сообщения. Почтовые объекты позволяют вам инкапсулировать всю логику создания email-сообщений в единый, простой класс, который можно отправить методом Mail::send
.
Каталог Notifications
Изначально этого каталога нет, он создаётся Artisan-командой make:notification
. Каталог Notifications
содержит все “транзакционные” уведомления, которые отправляются вашим приложением, такие как простые уведомления о событиях, произошедших в вашем приложении. Возможность уведомлений в Laravel абстрагирует отправку уведомлений через разные драйверы, такие как email, Slack, SMS или сохранение в БД.
Каталог Policies
Изначально этого каталога нет, он создаётся Artisan-командой make:policy
. Каталог Policies
содержит классы политик авторизации. Политики служат для определения, разрешено ли пользователю данное действие над ресурсом. Подробнее читайте в документации по авторизации.
Каталог Providers
Каталог Providers
содержит все сервис-провайдеры для вашего приложения. Сервис-провайдеры загружают ваше приложение, добавляя сервисы в сервис-контейнер, регистрируя события, и выполняя любые другие задачи для подготовки вашего приложения к входящим запросам.
В свежеустановленном приложении Laravel эта папка уже содержит несколько провайдеров. При необходимости вы можете добавлять свои провайдеры в эту директорию.