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

10 мая 2018 г.

app

Каталог самого приложения. Именно в нем большей частью нам придется работать. Подробнее рассмотрим ниже.

bootstrap

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

config

Уже знакомы, каталог файлов конфигурации.

database

Содержит миграции, фабрики моделей и так называемые сиды (seed): сервисы для заполнения базы данных каким-либо начальными или фейковыми (тестовыми) данными.

public

Единственный каталог приложения, доступный миру (впрочем, как настроить сервер, конечно...). Именно здесь - точка входа, index.php, а также js, css, favicon, .htaccess и robots.txt. Сюда же, естественно, можно сложить изображения (в отдельный каталог).

resources

Содержит некомпилированные файлы (js, css, less, sass и представления) и языковые файлы (в каталоге lang).

routes

Маршруты (роуты), собранные в специализированные файлы. Их названиея говорят сами за себя.

storage

Хранилище всякой всячины, генерируемой фреймворком. Имеет три каталога. В app могут храниться файлы, генерируемые приложением. В app/public, например, могут храниться аватары юзеров и другие их файлы. На app/public можно сделать симлинк из public/storage, например (причем для этого в Laravel даже есть специальная консольная команда - php artisan storage:link). В framework складываеются файлы сгенерированные фреймворком (кеш, сессии, скомпилированные шаблонизатором Blade представления). Наконец, в logs пишутся логи - по умолчанию один файл laravel.log.

tests

Каталог для юнит-тестов. Каждый класс должен иметь суффикс Test.

vendor

Стандартный каталог, к которому за последние годы привык, пожалуй, каждый приличный разработчик. Создается и обновляется композером, содержит сторонние пакеты (в т.ч. сам фреймворк Laravel) со всеми зависимостями.

А теперь подробнее о каталоге app. Все содержимое этого каталога регистрируется под пространством имен (namespace) App и автоматически загружается композером.

Сразу после установки присутствуют далеко не все из перечисленных каталогов, потому что некоторые из них могут вовсе не понадобиться вашему приложению. Пока есть только ConsoleExceptionHttp и Providers.

Основные каталоги, в которых нам придется работать - Console и Http - именно в них формируется API для работы с приложением (по протоколам CLI и HTTP(S) соответственно).

Broadcasting

Будет содержать классы каналов вещания. Появится в случае необходимости какого либо вещания, сразу после создания первого же канала командой make:channel.

Console

Мы уже встречались с примерами консольных команд, в Laravel ими распоряжается класс Artisan. Команды выглядят как, например, php artisan make:channel. Эта команда вызывает встроенный в фреймворк консольный метод. Но мы сами можем создавать пользовательские команды, и точно так же вызывать их в консоли. А храниться они будут именно в этом каталоге. Создавать их можно как вручную, так и командой make:command. Здесь уже есть класс Kernel, в котором эти команды будут регистрироваться.

Events

Хранит классы событий (извещающие приложение о наступлении события). Будет создана, как только мы создадим первое событие (командой event:generate или make:event).

Exceptions

Содержит классы исключений. Из коробки имеется обработчик вывода исключений (класс Handler), который мы вольны кастомизировать.

Http

Хранилище HTTP API. Именно здесь находятся контроллеры приложения (в каталоге Controllers) и  посредники (в каталоге Middleware). Сюда же можно поместить обработчики форм. Класс Kernel является регистратором всего этого добра.

Jobs

Содержит запланированные задачи. Создается при создании первой задачи командой make:job.

Listeners

Хранит классы обработчиков событий. Создается при генерации события (event:generate) или обработчика (make:listener).

Mail

Каталог для классов, обрабатывающих отправляемые из приложения письма. Создается при создании первого класса клмандой make:mail.

Notifications

Каталог для классов-обработчиков уведомлений приложения. Уведомления могут привязываться к событиям, т.е. отсылаться при наступлении события. В Laravel существуют различгые драйверы уведомлений, использующие различный транспорт: email, Slack, SMS или просто сохранение в БД. Каталог создается при создании первого уведомления командой make:notification.

Policies

Каталог для классов политики авторизации. Создается вместе с первым классом командой make:policy.

Providers

Содержит сервис-провайдеры приложения. После установки уже имеются несколько классов.

Rules

Каталог для правил валидации. Создается с первым правилом командой make:rule.