#Введение
Стандартная структура приложения Laravel предназначена для удобного старта как для больших, так и для небольших проектов. Однако вы можете организовать своё приложение так, как вам удобно. Laravel практически не накладывает ограничений на расположение классов — главное, чтобы Composer мог их автозагрузить.
Новичок в Laravel? Ознакомьтесь с Laravel Bootcamp — интерактивным курсом по фреймворку, в котором вы создадите своё первое приложение на Laravel.
#Корневой каталог
#Каталог App
Каталог app содержит основную логику вашего приложения. Мы подробнее рассмотрим этот каталог позже; однако почти все классы вашего приложения будут находиться именно здесь.
#Каталог Bootstrap
Каталог bootstrap содержит файл app.php, который инициализирует фреймворк. Здесь также находится каталог cache с файлами, создаваемыми фреймворком для оптимизации производительности, такими как кэш маршрутов и сервисов. Обычно вам не нужно изменять файлы в этом каталоге.
#Каталог Config
Каталог config, как следует из названия, содержит все конфигурационные файлы вашего приложения. Рекомендуется ознакомиться с ними, чтобы понять доступные настройки.
#Каталог Database
Каталог database содержит миграции базы данных, фабрики моделей и сиды. При желании здесь можно хранить базу данных SQLite.
#Каталог Public
Каталог public содержит файл index.php — точку входа для всех запросов к вашему приложению, а также настраивает автозагрузку. Здесь же хранятся ваши публичные ресурсы: изображения, JavaScript и CSS.
#Каталог Resources
Каталог resources содержит ваши views, а также исходные, не скомпилированные ресурсы, такие как CSS и JavaScript.
#Каталог Routes
Каталог routes содержит все определения маршрутов вашего приложения. По умолчанию Laravel включает несколько файлов маршрутов: web.php, api.php, console.php и channels.php.
Файл web.php содержит маршруты, которые RouteServiceProvider помещает в группу middleware web, обеспечивающую поддержку сессий, защиту от CSRF и шифрование cookie. Если ваше приложение не предоставляет безсессионный RESTful API, скорее всего, все маршруты будут определены в web.php.
Файл api.php содержит маршруты, которые RouteServiceProvider помещает в группу middleware api. Эти маршруты предназначены для безсессионного использования, запросы к ним должны аутентифицироваться через токены и не имеют доступа к состоянию сессии.
Файл console.php предназначен для определения всех консольных команд на основе замыканий. Каждое замыкание связано с экземпляром команды, что упрощает работу с методами ввода-вывода команды. Хотя этот файл не содержит HTTP-маршрутов, он определяет консольные точки входа (маршруты) в ваше приложение.
Файл channels.php используется для регистрации всех каналов трансляции событий, поддерживаемых вашим приложением.
#Каталог Storage
Каталог storage содержит логи, скомпилированные шаблоны Blade, файловые сессии, файловый кэш и другие файлы, создаваемые фреймворком. Он разделён на каталоги app, framework и logs. Каталог app можно использовать для хранения файлов, создаваемых вашим приложением. Каталог framework содержит файлы и кэш, созданные фреймворком. Каталог logs хранит файлы логов вашего приложения.
Каталог storage/app/public можно использовать для хранения файлов, создаваемых пользователями, например, аватаров профиля, которые должны быть доступны публично. Рекомендуется создать символическую ссылку public/storage, указывающую на этот каталог. Ссылку можно создать с помощью Artisan-команды php artisan storage:link.
Расположение каталога storage можно изменить с помощью переменной окружения LARAVEL_STORAGE_PATH.
#Каталог Tests
Каталог tests содержит ваши автоматизированные тесты. В комплекте идут примеры модульных и функциональных тестов на базе PHPUnit. Каждый класс теста должен иметь суффикс Test. Тесты можно запускать командами phpunit или php vendor/bin/phpunit. Для более подробного и удобного отображения результатов используйте Artisan-команду php artisan test.
#Каталог Vendor
Каталог vendor содержит зависимости, установленные через Composer.
#Каталог App
Большая часть вашего приложения размещается в каталоге app. По умолчанию он находится в пространстве имён App и автозагружается Composer с использованием стандарта PSR-4.
Каталог app содержит несколько дополнительных каталогов, таких как Console, Http и Providers. Рассматривайте каталоги Console и Http как API к ядру вашего приложения. HTTP-протокол и CLI — это два способа взаимодействия с приложением, но они не содержат бизнес-логику. Другими словами, это два способа отправки команд приложению. Каталог Console содержит все ваши Artisan-команды, а каталог Http — контроллеры, middleware и запросы.
В каталоге app будут создаваться и другие каталоги по мере использования Artisan-команд make для генерации классов. Например, каталог app/Jobs появится только после выполнения команды make:job для создания класса задания.
Многие классы в каталоге app можно сгенерировать с помощью Artisan-команд. Чтобы увидеть доступные команды, выполните в терминале php artisan list make.
#Каталог Broadcasting
Каталог Broadcasting содержит все классы каналов трансляции для вашего приложения. Эти классы создаются командой make:channel. По умолчанию каталог отсутствует, но будет создан при создании первого канала. Подробнее о каналах смотрите в документации по трансляции событий.
#Каталог Console
Каталог Console содержит все пользовательские Artisan-команды вашего приложения. Эти команды можно создавать с помощью команды make:command. Здесь же находится консольное ядро, где регистрируются ваши команды и определяются планировщики задач.
#Каталог Events
Каталог отсутствует по умолчанию, но создаётся командами event:generate и make:event. В каталоге Events хранятся классы событий. События позволяют уведомлять другие части приложения о произошедших действиях, обеспечивая гибкость и слабую связанность.
#Каталог Exceptions
Каталог Exceptions содержит обработчик исключений вашего приложения и является удобным местом для размещения собственных исключений. Для настройки логирования или отображения исключений изменяйте класс Handler в этом каталоге.
#Каталог Http
Каталог Http содержит контроллеры, middleware и form requests. Почти вся логика обработки входящих HTTP-запросов размещается здесь.
#Каталог Jobs
Каталог отсутствует по умолчанию, но создаётся при выполнении команды make:job. В каталоге Jobs хранятся очередные задания вашего приложения. Задания могут ставиться в очередь или выполняться синхронно в рамках текущего запроса. Синхронно выполняемые задания иногда называют "командами", так как они реализуют паттерн команда.
#Каталог Listeners
Каталог отсутствует по умолчанию, но создаётся командами event:generate или make:listener. В каталоге Listeners находятся классы, обрабатывающие ваши события. Слушатели получают экземпляр события и выполняют логику в ответ на его возникновение. Например, событие UserRegistered может обрабатываться слушателем SendWelcomeEmail.
#Каталог Mail
Каталог отсутствует по умолчанию, но создаётся командой make:mail. В каталоге Mail хранятся все классы, представляющие электронные письма, отправляемые вашим приложением. Объекты Mail позволяют инкапсулировать всю логику создания письма в одном простом классе, который можно отправить с помощью метода Mail::send.
#Каталог Models
Каталог Models содержит все ваши классы моделей Eloquent. Встроенный в Laravel ORM Eloquent предоставляет удобную и простую реализацию ActiveRecord для работы с базой данных. Каждая таблица базы данных имеет соответствующую "Model", используемую для взаимодействия с этой таблицей. Модели позволяют выполнять запросы к данным и вставлять новые записи.
#Каталог Notifications
Каталог отсутствует по умолчанию, но создаётся командой make:notification. В каталоге Notifications хранятся все "транзакционные" уведомления, отправляемые вашим приложением, например, простые уведомления о событиях. Функционал уведомлений Laravel абстрагирует отправку через разные драйверы, такие как email, Slack, SMS или хранение в базе данных.
#Каталог Policies
Каталог отсутствует по умолчанию, но создаётся командой make:policy. В каталоге Policies находятся классы политик авторизации вашего приложения. Политики определяют, может ли пользователь выполнить определённое действие над ресурсом.
#Каталог Providers
Каталог Providers содержит все сервис-провайдеры вашего приложения. Сервис-провайдеры инициализируют приложение, связывая сервисы в контейнере, регистрируя события и выполняя другие задачи подготовки к обработке запросов.
В свежем приложении Laravel этот каталог уже содержит несколько провайдеров. Вы можете добавлять свои собственные по мере необходимости.
#Каталог Rules
Каталог отсутствует по умолчанию, но создаётся командой make:rule. В каталоге Rules хранятся объекты пользовательских правил валидации. Правила позволяют инкапсулировать сложную логику валидации в простой объект. Подробнее смотрите в документации по валидации.