Структура приложения

Введение

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

Корневой каталог

В корне свежеустановленного фреймворка вы можете видеть следующие каталоги:

app - здесь, как вы догадываетесь, располагается собственно ваше приложение. Ниже мы рассмотрим содержимое этого каталога подробнее.

bootstrap - содержит файлы, которые осуществляют первоначальную загрузку (bootstraping) фреймворка и настраивают автозагрузку классов. В подпапке cache хранятся различные сгенерированные файлы, необходимые для работы фреймворка.

config - здесь находятся конфигурационные файлы приложения.

database - каталог для файлов миграций БД и "посева" данных. Здесь же можно хранить файл базы данных SQLite.

public - является DocumentRoot домена вашего приложения и содержит статические файлы - css, js, изображения и т.п.

resources - здесь находятся шаблоны (Views), файлы локализации и, если таковые имеются, рабочие файлы LESS, SASS и js-приложения на фреймворках типа ReactJS, AngularJS или Ember, которые потом собираются внешним инструментом в папку public.

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

test - каталог для юнит-тестов.

vendor - в этот каталог Composer устанавливает пакеты, указанные в composer.json.

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

В каталоге app находятся классы вашего Laravel-приложения. По умолчанию, этот каталог имеет неймспейс App и классы в нём автозагружаются согласно стандарту PRS-4.

Внутри находятся несколько подкаталогов, таких как Console, Http и Providers. Первые два каталога, как следует из названия, содержат классы, предоставляющие API к вашему приложению по протоколам CLI (командная строка) и HTTP (работа через браузер). В Console находятся классы Artisan-команд, а в Http - контроллеры, посредники (middlewares) и реквесты (классы валидации пользовательского ввода). Такой подход должен подтолкнуть новичков к отходу от общепринятого, но вредного подхода писать весь код в контроллерах, и абстрагировать логику приложения от метода обращения к нему.

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

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

Каталог Jobs содержит задачи, исполняемые в очередях

Каталог Listeners содержит классы обработчиков событий. В них содержится логика - что именно нужно делать в ответ на возникшее событие. Так, событие UserRegistered из папки Events может вызывать обработчик SendWelcomeEmail, который находится в папке Listeners

Каталог Policies содержит классы политик, которые занимаются разграничением доступа приложения.

Примечание: В каталоге app можно генерировать соответствующие классы Artisan-командой make. Подробнее смотрите в списке доступных команд php artisan list и в справке по конкретной команде php artisan help make:policy