Структура приложения
Introduction
Дефолтная структура приложения Laravel спроектирована таким образом, чтобы стать удобной отправной точкой и для маленьких, и для больших приложений. И, разумеется, вы можете изменить эту структуру и организовать приложение так, как вам нравится - Laravel не накладывает почти никаких ограничений на то, где именно должен находиться тот или иной класс - лишь бы Composer смог его загрузить.
Корневой каталог
В корне свежеустановленного фреймворка вы можете видеть следующие каталоги:
app
- здесь, как вы догадываетесь, располагается собственно ваше приложение. Ниже мы рассмотрим содержимое этого каталога подробнее.
bootstrap
- содержит файлы, которые осуществляют первоначальную загрузку (bootstraping) фреймворка и настраивают автозагрузку классов.
config
- здесь находятся конфигурационные файлы приложения.
database
- каталог для файлов миграций БД и "посева" данных.
public
- является DocumentRoot домена вашего приложения и содержит статические файлы - css, js, изображения и т.п.
resources
- здесь находятся шаблоны (Views), файлы локализации и, если таковые имеются, рабочие файлы LESS, SASS и js-приложения на фреймворках типа AngularJS или Ember, которые потом собираются внешним инструментом в папку public
.
storage
- этот каталог должен иметь права для записи в него извне и в нём Laravel хранит скомпилированные Blade-шаблоны, файлы сессии, файловый кэш и другие сгенерированные файлы, нужные для работы.
test
- каталог для юнит-тестов
vendor
- в этот каталог Composer устанавливает пакеты, указанные в composer.json.
Папка приложения
В каталоге app
находятся классы вашего Laravel-приложения. По умолчанию, этот каталог имеет неймспейс App
и классы в нём автозагружаются согласно стандарту PRS-4. Вы можете сменить это имя при помощи Artisan-команды app:name
.
Внутри находятся несколько дополнительных каталогов, таких как Console
, Http
и Providers
. Первые два каталога, как следует из названия, содержат классы, предоставляющие API к вашему приложению по протоколам CLI (командная строка) и HTTP (работа через браузер). В Console
находятся классы Artisan-команд, а в Http
- контроллеры, фильтры и реквесты, т.е. классы валидации пользовательского ввода. Такой подход должен подтолкнуть новичков к отходу от общепринятого, но вредного подхода писать весь код в контроллерах, и абстрагировать логику приложения от метода обращения к нему.
Каталог Commands
содержит классы команд вашего приложения. Команды представляют собой задания, которые можно ставить в очередь, а так же задачи, которые можно запускать синхронно с процессом обработки запроса.
Каталог Events
содержит классы событий. Конечно, использование классов для представления событий не обязательно, но если вы решите делать именно так, то они будут помещаться в этот каталог при создании с помощью Artisan CLI.
Каталог Handlers
содержит классы обработчиков для команд и событий. Обработчики получают команду или событие и выполняют необходимые действия в ответ на инициирование этой команды или события.
Каталог Services
содержит различные вспомогательные механизмы вашего приложения (хелперы и сервисы). Например, сервис Registrar
, включённый в Laravel, отвечает за валидацию данных и регистрацию пользователей вашего приложения. Другим примером может быть сервис для взаимодействия с какими-либо внешними API, системами статистики или даже другими сервисами, которые получают данные от вашего приложения.
Каталог Exceptions
содержит обработчики исключений, а так же здесь следует размещать сами классы исключений, которые используются в вашем приложении.
Примечание: В каталоге
app
можно генерировать соответствующие классы командамиmake:controller
,make:filter
,make:request
,make:console
иmake:provider
.
Изменения названия неймспейса
Как сказано выше, по умолчанию неймспейс, в котором располагается приложение Laravel называется App
. Вы можете сменить его соответствующей командой:
php artisan app:name SocialNet
Во всех файлах классов в каталоге app
название корневого неймспейса будет изменено на SocialNet