Структура застосунку — Laravel
Вступ
Типова структура застосунку Laravel створена, щоб бути чудовою відправною точкою і для великих, і для малих застосунків. Але ви вільні організовувати свій застосунок так, як вам подобається. Laravel майже не накладає обмежень на те, де саме розташований той чи інший клас, — за умови, що Composer може його автозавантажити.
Коренева тека
Тека App
Тека app містить основний код вашого застосунку. Ми розглянемо цю теку детальніше трохи згодом; утім, майже всі класи вашого застосунку будуть саме в ній.
Тека Bootstrap
Тека bootstrap містить файл app.php, який завантажує (bootstrap) фреймворк. Ця тека також містить теку cache, у якій лежать згенеровані фреймворком файли для оптимізації продуктивності, як-от файли кешу маршрутів і сервісів.
Тека Config
Тека config, як випливає з назви, містить усі конфігураційні файли вашого застосунку. Дуже слушна ідея — прочитати всі ці файли й ознайомитися з усіма доступними вам опціями.
Тека Database
Тека database містить міграції бази даних, фабрики моделей і сідери. За бажання ви також можете використовувати цю теку для зберігання бази даних SQLite.
Тека Public
Тека public містить файл index.php, який є точкою входу для всіх запитів, що надходять до вашого застосунку, і налаштовує автозавантаження. Ця тека також містить ваші ассети (assets), як-от зображення, JavaScript і CSS.
Тека Resources
Тека resources містить ваші представлення (views), а також сирі, нескомпільовані ассети, такі як CSS чи JavaScript.
Тека Routes
Тека routes містить усі визначення маршрутів вашого застосунку. За замовчуванням Laravel містить два файли маршрутів: web.php і console.php.
Файл web.php містить маршрути, які Laravel розміщує в групі middleware web, що забезпечує стан сесії, захист від CSRF і шифрування cookie. Якщо ваш застосунок не пропонує stateless RESTful API, то, найімовірніше, усі ваші маршрути будуть визначені у файлі web.php.
У файлі console.php ви можете визначати всі свої консольні команди на основі замикань. Кожне замикання привʼязується до екземпляра команди, що дає простий підхід до взаємодії з методами вводу-виводу кожної команди. Хоча цей файл не визначає HTTP-маршрутів, він визначає консольні точки входу (маршрути) до вашого застосунку. Також у файлі console.php ви можете планувати завдання.
За бажання ви можете встановити додаткові файли маршрутів для API-маршрутів (api.php) і каналів мовлення (channels.php) за допомогою Artisan-команд install:api та install:broadcasting.
Файл api.php містить маршрути, які призначені бути stateless, тож запити, що потрапляють до застосунку через ці маршрути, мають автентифікуватися через токени і не матимуть доступу до стану сесії.
У файлі channels.php ви можете зареєструвати всі канали мовлення подій, які підтримує ваш застосунок.
Тека Storage
Тека storage містить ваші логи, скомпільовані шаблони Blade, файлові сесії, файлові кеші та інші файли, згенеровані фреймворком. Ця тека поділена на теки app, framework і logs. Теку app можна використовувати для зберігання будь-яких файлів, згенерованих вашим застосунком. Тека framework використовується для зберігання згенерованих фреймворком файлів і кешів. Нарешті, тека logs містить файли логів вашого застосунку.
Теку storage/app/public можна використовувати для зберігання згенерованих користувачами файлів, як-от аватарів профілю, які мають бути публічно доступними. Вам слід створити символічне посилання за адресою public/storage, яке вказує на цю теку. Створити посилання можна за допомогою Artisan-команди php artisan storage:link.
Тека Tests
Тека tests містить ваші автоматизовані тести. З коробки надаються приклади модульних (unit) і функціональних (feature) тестів для Pest чи PHPUnit. Кожен клас тесту має мати суфікс Test. Запустити тести можна командами /vendor/bin/pest або /vendor/bin/phpunit. Або, якщо ви хочете детальніше й гарніше представлення результатів тестів, ви можете запустити тести Artisan-командою php artisan test.
Тека Vendor
Тека vendor містить ваші залежності Composer.
Тека App
Більша частина вашого застосунку розміщується в теці app. За замовчуванням ця тека належить простору імен App і автозавантажується Composer за стандартом автозавантаження PSR-4.
За замовчуванням тека app містить теки Http, Models і Providers. Проте з часом усередині теки app буде згенеровано низку інших тек, у міру того як ви використовуватимете Artisan-команди make для генерації класів. Наприклад, тека app/Console не існуватиме, доки ви не виконаєте Artisan-команду make:command для генерації класу команди.
Теки Console і Http докладніше пояснюються у відповідних розділах нижче, але сприймайте теки Console і Http як такі, що надають API до ядра вашого застосунку. Протокол HTTP і CLI — це обидва механізми взаємодії з вашим застосунком, але вони фактично не містять логіки застосунку. Іншими словами, це два способи віддавати команди вашому застосунку. Тека Console містить усі ваші Artisan-команди, тоді як тека Http містить ваші контролери, middleware і запити.
Примітка Багато класів у теці
appможна згенерувати через Artisan за допомогою команд. Щоб переглянути доступні команди, виконайте в терміналі командуphp artisan list make.
Тека Broadcasting
Тека Broadcasting містить усі класи каналів мовлення вашого застосунку. Ці класи генеруються командою make:channel. Ця тека не існує за замовчуванням, але буде створена для вас, коли ви створите свій перший канал. Щоб дізнатися більше про канали, перегляньте документацію з мовлення подій.
Тека Console
Тека Console містить усі кастомні Artisan-команди вашого застосунку. Ці команди можна згенерувати за допомогою команди make:command.
Тека Events
Ця тека не існує за замовчуванням, але буде створена для вас Artisan-командами event:generate і make:event. Тека Events містить класи подій. Події можна використовувати, щоб сповіщати інші частини вашого застосунку про те, що сталася певна дія, забезпечуючи значну гнучкість і послаблення звʼязності.
Тека Exceptions
Тека Exceptions містить усі кастомні винятки вашого застосунку. Ці винятки можна згенерувати за допомогою команди make:exception.
Тека Http
Тека Http містить ваші контролери, middleware і form request. Майже вся логіка обробки запитів, що надходять до вашого застосунку, буде розміщена в цій теці.
Тека Jobs
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команду make:job. Тека Jobs містить завдання (jobs), які можна ставити в чергу, для вашого застосунку. Завдання можуть ставитися вашим застосунком у чергу або виконуватися синхронно в межах поточного життєвого циклу запиту. Завдання, які виконуються синхронно під час поточного запиту, іноді називають «командами», оскільки вони є реалізацією патерну «Команда».
Тека Listeners
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команди event:generate або make:listener. Тека Listeners містить класи, які обробляють ваші події. Слухачі подій отримують екземпляр події й виконують логіку у відповідь на її спрацювання. Наприклад, подію UserRegistered може обробляти слухач SendWelcomeEmail.
Тека Mail
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команду make:mail. Тека Mail містить усі ваші класи, що представляють електронні листи, які надсилає ваш застосунок. Обʼєкти пошти дозволяють інкапсулювати всю логіку побудови листа в одному простому класі, який можна надіслати методом Mail::send.
Тека Models
Тека Models містить усі ваші класи моделей Eloquent. ORM Eloquent, що входить до Laravel, надає гарну, просту реалізацію ActiveRecord для роботи з вашою базою даних. Кожній таблиці бази даних відповідає «Модель», яка використовується для взаємодії з цією таблицею. Моделі дозволяють робити запити до даних у ваших таблицях, а також вставляти нові записи в таблицю.
Тека Notifications
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команду make:notification. Тека Notifications містить усі «транзакційні» сповіщення, які надсилає ваш застосунок, наприклад прості сповіщення про події, що відбуваються всередині вашого застосунку. Функціонал сповіщень Laravel абстрагує надсилання сповіщень через різні драйвери, такі як електронна пошта, Slack, SMS, або зі збереженням у базі даних.
Тека Policies
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команду make:policy. Тека Policies містить класи політик авторизації (authorization policy) вашого застосунку. Політики використовуються, щоб визначити, чи може користувач виконати певну дію щодо ресурсу.
Тека Providers
Тека Providers містить усі сервіс-провайдери вашого застосунку. Сервіс-провайдери завантажують (bootstrap) ваш застосунок, привʼязуючи сервіси в контейнері сервісів, реєструючи події або виконуючи будь-які інші завдання для підготовки вашого застосунку до вхідних запитів.
У свіжому застосунку Laravel ця тека вже міститиме AppServiceProvider. Ви вільні додавати до неї власні провайдери за потреби.
Тека Rules
Ця тека не існує за замовчуванням, але буде створена для вас, якщо ви виконаєте Artisan-команду make:rule. Тека Rules містить обʼєкти кастомних правил валідації вашого застосунку. Правила використовуються, щоб інкапсулювати складну логіку валідації в простому обʼєкті. Докладніше див. у документації з валідації.
Виправити терміни, дописати розділ або взяти нову главу може кожен. Термінологію узгоджуємо в глосарії, щоб переклад лишався однорідним.