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