Структура каталога

Введение

Структура 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, чтобы сгенерировать класс задачи.

{tip} Многие классы в каталоге 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 эта папка уже содержит несколько провайдеров. При необходимости вы можете добавлять свои провайдеры в эту директорию.