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

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