Laravel входит в число самых популярных PHP-фреймворков для разработки современных веб-приложений. Его используют для создания SaaS-платформ, CRM-систем, API-сервисов, маркетплейсов и сложных B2B-решений. Одной из причин популярности является сочетание ряда возможностей и простоты использования. Laravel предоставляет готовый ORM-слой Eloquent для работы с базой данных, CLI-инструмент Artisan для автоматизации типовых задач, а также стартовые наборы аутентификации Breeze или Jetstream. С помощью этих инструментов базовая пользовательская логика реализуется достаточно быстро.
В статье рассмотрим создание проекта, структуру, примеры проектов на Laravel, лучшие практики и процесс развертывания. Команда Asabix реализовала более 50 Laravel-проектов, поэтому наши рекомендации основаны на реальном опыте.
Разработка на Laravel: подготовка и создание проекта
Если вы решили создать новый проект на Laravel, прежде всего необходимо выполнить три ключевых шага: подготовить локальное окружение, установить необходимые инструменты и сгенерировать базовую структуру приложения. Laravel имеет достаточно простой процесс инициализации: достаточно установить PHP и Composer, создать проект через CLI и настроить конфигурацию окружения. Далее подключается база данных, выполняются миграции и запускается первый локальный сервер. Подробные технические объяснения всех этапов можно найти в документации Laravel, однако базовый процесс создания проекта выглядит именно так, поэтому рассмотрим его далее.
Требования к окружению
Перед созданием Laravel-проекта убедитесь, что ваша система соответствует базовым требованиям. Современные версии фреймворка работают с PHP 8.2 или новее и требуют нескольких стандартных PHP-расширений, включая BCMath, Ctype, JSON, Mbstring, OpenSSL, PDO, Tokenizer и XML.
Помимо PHP, для работы с Laravel необходимы следующие инструменты:
- Composer – менеджер зависимостей для PHP, через который устанавливаются библиотеки и сам фреймворк;
- MySQL или PostgreSQL – система управления базами данных;
- Node.js и npm – используются для сборки frontend-ресурсов (через Vite);
- Git – желательно для управления версиями и работы с репозиториями.
Проверить, установлены ли необходимые инструменты, можно с помощью CLI:
php -v
composer --version
node -v
Если все компоненты установлены, можно переходить к созданию проекта Laravel.
Установка Composer и Laravel Installer
Проект можно создать двумя способами: через стандартный Composer или через специальный Laravel Installer, который упрощает генерацию новых проектов.
Чтобы установить Laravel Installer глобально, выполните команду:
composer global require laravel/installer
После этого команда laravel станет доступной в вашем CLI. Проверить установку можно командой:
laravel --version
Это позволит быстро создавать готовые проекты на Laravel без дополнительной настройки.
Создание нового проекта
Существует два основных способа создания нового Laravel-приложения.
1) Через Laravel Installer:
laravel new example-app
cd example-app
Инсталлятор автоматически создаст структуру проекта, установит зависимости и подготовит базовую конфигурацию.
2) Альтернативный способ через Composer:
composer create-project laravel/laravel example-app
cd example-app
Этот метод использует стандартный механизм Composer для загрузки шаблона Laravel-проекта. Он дает больше контроля над процессом установки, но функционально результат будет таким же.
Настройка окружения
Следующим шагом после создания проекта является настройка конфигурации окружения. В Laravel все основные параметры приложения хранятся в файле .env.
Сначала скопируйте пример файла:
cp .env.example .env
Затем сгенерируйте уникальный ключ приложения:
php artisan key:generate
Этот ключ используется для шифрования сессий, cookie и других чувствительных данных. Без него Laravel не сможет корректно работать.
Переменные окружения
Файл .env определяет конфигурацию приложения в зависимости от окружения. Ключевые параметры:
APP_NAME="My App"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
Значение APP_ENV определяет режим работы приложения:
- local – среда разработки с подробными сообщениями об ошибках;
- staging – тестовая среда перед релизом;
- production – рабочая среда.
В production-режиме всегда необходимо устанавливать:
APP_DEBUG=false
Это предотвращает отображение технической информации и ошибок пользователям. Также важно помнить, что файл .env не должен попадать в Git-репозиторий – обычно он уже добавлен в .gitignore.
Подключение базы данных
Laravel использует ORM Eloquent и систему миграций для работы с базой данных. Перед запуском приложения необходимо настроить подключение к БД в файле .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_app
DB_USERNAME=root
DB_PASSWORD=secret
Перед выполнением миграций убедитесь, что база данных my_app уже создана. После этого можно сгенерировать структуру таблиц с помощью миграций:
php artisan migrate
Команда выполнит все файлы миграций и создаст необходимые таблицы в базе данных. После настройки запустите локальный сервер:
php artisan serve
Laravel будет доступен по адресу:
http://localhost:8000
Если все выполнено правильно, в браузере откроется стандартная приветственная страница Laravel – это означает, что проект успешно создан и готов к дальнейшей разработке.
Установка локального стека для разработки
Следующим шагом является запуск приложения локально. В локальной среде разработки можно тестировать функциональность, проверять маршруты, работать с базой данных и отлаживать код перед развертыванием на сервере. Самый простой способ организовать локальный стек – использовать встроенный сервер Laravel, который запускается одной командой. Он подходит для индивидуальной разработки, быстрого тестирования функций или изучения фреймворка. Не требует установки дополнительных сервисов или контейнеризации: достаточно иметь установленный PHP и выполнить команду в корне проекта.
Однако при командной разработке или в сложных проектах возникает необходимость в одинаковом окружении для всех участников, так как различия в версиях PHP, расширениях или локальных сервисах часто становятся причиной ошибок. Альтернативный подход, предлагаемый Laravel, – использование контейнеризированной среды через Docker. Для этого во фреймворке предусмотрен инструмент Laravel Sail (позволяет развернуть полный стек разработки за несколько команд). Laravel Sail создает изолированную среду на основе Docker-контейнеров, где уже настроены основные сервисы: PHP, веб-сервер, база данных, кэш и другие вспомогательные компоненты. Таким образом, все разработчики работают в одинаковой конфигурации независимо от операционной системы или локальных настроек.
Так что выбрать: встроенный сервер Laravel или Docker-среду? Это зависит от задач проекта. Если вы работаете над небольшим приложением или только знакомитесь с Laravel, достаточно стандартного локального сервера. Если же проект предполагает командную разработку, интеграции с несколькими сервисами или более сложную инфраструктуру, стоит использовать контейнеризацию через Sail. Рассмотрим оба варианта запуска локальной среды.
Локальный сервер Laravel
Самый простой способ запустить приложение – использовать встроенный сервер Laravel. В корне проекта выполните команду:
php artisan serve
После запуска приложение будет доступно в браузере по адресу:
http://localhost:8000
Этот сервер использует возможности PHP для обработки HTTP-запросов и позволяет быстро проверять работу маршрутизации, контроллеров и шаблонов. Он не предназначен для production-среды, но отлично подходит для локальной разработки.
Laravel Sail (Docker)
Для командной разработки Laravel рекомендует использовать Laravel Sail – готовую Docker-среду для запуска проекта.
Установка Sail выполняется командой:
php artisan sail:install
После установки можно запустить окружение:
./vendor/bin/sail up
Laravel Sail автоматически создает Docker-контейнеры для основных сервисов, необходимых для работы приложения.
Основные преимущества Sail:
- одинаковое окружение для всей команды;
- готовые контейнеры для сервисов (MySQL, Redis, Mailpit);
- отсутствие проблем с локальными версиями PHP или расширениями.
Разработчики могут быстро подключаться к проекту и не тратить время на сложную настройку локальной инфраструктуры.
Структура проекта Laravel
Как уже упоминалось, Laravel популярен благодаря понятной и логичной структуре проекта. Фреймворк использует стандартизированную архитектуру, которая помогает быстро ориентироваться в коде, разделять ответственность между компонентами и поддерживать систему в долгосрочной перспективе. Стандартная структура директорий в Laravel построена на принципе Separation of Concerns – то есть разделения логики приложения по ролям. Маршруты, бизнес-логика, конфигурации, шаблоны и служебные файлы находятся в отдельных папках. После создания нового Laravel-проекта вы увидите несколько основных директорий. Самые важные из них отвечают за логику приложения, маршрутизацию, конфигурацию и хранение временных данных.
Основные директории
| Папка | Назначение | Ключевые файлы |
| app/ | Бизнес-логика приложения | Models, Controllers |
| routes/ | Маршрутизация приложения | web.php, api.php |
| resources/ | Шаблоны и frontend-ресурсы | views/ |
| public/ | Публичная директория веб-сервера | index.php |
| config/ | Конфигурационные файлы | app.php |
| storage/ | Логи, кэш и служебные файлы | logs/, cache/ |
Рассмотрим кратко роль каждой из этих директорий.
app/ – основная папка, в которой находится код приложения. Здесь размещаются контроллеры, модели, сервисы, события, middleware и другие компоненты, реализующие бизнес-логику системы. Именно здесь обычно происходит основная разработка сайтов на Laravel.
routes/ – содержит файлы маршрутизации. Laravel позволяет разделять маршруты для веб-интерфейса и API. Как правило, используются файлы web.php для браузерных маршрутов и api.php для REST API.
resources/ – предназначена для пользовательского интерфейса. Здесь находятся Blade-шаблоны, а также frontend-ресурсы, которые компилируются через Vite или другие инструменты.
public/ – единственная директория, которая должна быть доступна веб-серверу. В ней находится файл index.php, через который обрабатываются все HTTP-запросы к приложению. Также здесь могут храниться статические файлы, например изображения.
config/ – содержит конфигурационные файлы фреймворка. Здесь настраиваются параметры приложения, сервисы, очереди, кэширование, подключения к базе данных и другие системные компоненты.
storage/ – используется для хранения служебных данных: логов, кэша, сессий, временных файлов и загруженных пользователями документов. Эта директория активно используется во время работы приложения, поэтому веб-сервер должен иметь права на запись в неё.
Storage symlink
Во многих случаях файлы, хранящиеся в storage, должны быть доступны из веб-интерфейса – например, пользовательские изображения.
Для этого Laravel использует символическую ссылку между директориями storage и public. Создать её можно командой:
php artisan storage:link
Эта команда создаёт симлинк между storage/app/public и public/storage. Благодаря этому файлы, сохранённые в хранилище приложения, становятся доступными через браузер без прямого доступа к внутренним директориям Laravel.
Примеры кода и архитектура Laravel
Следующим шагом в разработке на Laravel является понимание того, как организован код приложения. Фреймворк предлагает набор инструментов и шаблонов, которые помогают быстро создавать основные компоненты системы: контроллеры, маршруты, классы валидации и сервисы для бизнес-логики. Благодаря этому код остается структурированным и легко поддерживается в крупных проектах. Laravel использует Artisan CLI, который позволяет автоматически генерировать файлы и базовую структуру компонентов. Это значительно ускоряет разработку и обеспечивает соблюдение архитектурных стандартов фреймворка.
Создание контроллера
Контроллеры отвечают за обработку HTTP-запросов и взаимодействие между моделями и представлениями (views). В Laravel их можно быстро создать с помощью Artisan. Например, следующая команда создаёт resource-контроллер со стандартным набором CRUD-методов:
php artisan make:controller UserController --resource
После выполнения команды в директории app/Http/Controllers появится файл UserController.php, содержащий методы для работы с ресурсом:
- index() – отображение списка записей
- create() – форма создания новой записи
- store() – сохранение новой записи
- show() – просмотр одной записи
- edit() – форма редактирования
- update() – обновление записи
- destroy() – удаление записи
Маршрутизация
После создания контроллера необходимо настроить маршруты, которые определяют, как HTTP-запросы будут обрабатываться приложением.
В Laravel маршруты обычно задаются в файле routes/web.php. Например:
Route::prefix('admin')->group(function () {
Route::resource('users', UserController::class);
});
В этом примере все маршруты для ресурса users будут доступны с префиксом /admin. Laravel автоматически создаст полный набор CRUD-маршрутов, например:
- /admin/users
- /admin/users/create
- /admin/users/{id}
- /admin/users/{id}/edit
Валидация через Form Request
В Laravel используется механизм Form Request, который позволяет вынести правила валидации из контроллера в отдельный класс.
Создать Form Request можно с помощью Artisan:
php artisan make:request StoreUserRequest
После этого в директории app/Http/Requests будет создан класс StoreUserRequest, где можно задать правила проверки данных. Например:
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users'
];
}
Это делает контроллеры более компактными и упрощает повторное использование логики валидации.
Service Layer для бизнес-логики
В небольших проектах бизнес-логику иногда размещают прямо в контроллерах. Однако в более сложных системах это приводит к появлению так называемых “fat controllers”, которые сложно поддерживать и тестировать.
Чтобы этого избежать, логику приложения выносят в отдельный слой сервисов (Service Layer).
Пример структуры:
app/
Services/
UserService.php
В сервисе могут находиться операции, связанные с пользователями: создание, обновление, валидация или интеграции с другими сервисами. Использование сервисного слоя позволяет:
- избежать перегруженных контроллеров;
- изолировать бизнес-логику от HTTP-уровня;
- упростить написание unit-тестов;
- переиспользовать код в разных частях системы.
Domain-based структура для больших систем
В крупных проектах стандартная структура Laravel часто расширяется domain-based подходом. В этом случае код организуется не только по типу файлов, но и по бизнес-доменам.
Например:
app/
Domains/
Users/
Controllers
Models
Services
Такой подход позволяет группировать все компоненты, связанные с конкретной частью бизнес-логики, в одном месте, что упрощает навигацию по коду и делает архитектуру более понятной для новых разработчиков.
Пример проекта на Laravel
Как архитектура Laravel работает на практике? Рассмотрим упрощённый пример проектов Laravel – админ-панель для управления пользователями. Такой проект может быть частью CRM, внутреннего кабинета или B2B-системы. Он включает базовый CRUD-функционал, валидацию и сервисный слой для бизнес-логики.
Пример структуры проекта:
app/
Http/
Controllers/
UserController.php
Requests/
StoreUserRequest.php
UpdateUserRequest.php
Models/
User.php
Services/
UserService.php
routes/
web.php
resources/
views/
users/
index.blade.php
create.blade.php
edit.blade.php
database/
migrations/
2026_01_01_000000_create_users_table.php
В этой структуре:
- UserController обрабатывает HTTP-запросы и возвращает ответы;
- StoreUserRequest и UpdateUserRequest отвечают за валидацию;
- UserService содержит бизнес-логику создания и обновления пользователей;
- модель User работает с таблицей users;
- Blade-шаблоны отображают интерфейс;
- миграции создают структуру таблиц.
Пример маршрутов:
Route::prefix('admin')->group(function () {
Route::resource('users', UserController::class);
});
Контроллер не должен содержать всю логику напрямую. Его задача – принять запрос, передать данные в сервис и вернуть результат:
public function store(StoreUserRequest $request, UserService $userService)
{
$userService->create($request->validated());
return redirect()->route('users.index')
->with('success', 'User created successfully.');
}
Основная логика создания пользователя выносится в сервис:
public function create(array $data): User
{
return User::create($data);
}
Здесь реализовано правильное разделение ответственности в Laravel-проекте: контроллер управляет потоком запроса, Form Request валидирует данные, модель работает с базой данных, а сервис инкапсулирует бизнес-логику. В реальных проектах к этому могут добавляться роли, авторизация, очереди, события, API-методы и интеграции с внешними системами. Однако даже базовая структура уже показывает, как Laravel позволяет строить чистую и масштабируемую архитектуру.
Лучшие практики разработки на Laravel
При разработке на Laravel важно поддерживать чистую и масштабируемую архитектуру. Соблюдение базовых практик помогает избежать перегруженных контроллеров, упростить тестирование и обеспечить стабильную работу приложения в production. Ниже приведены основные рекомендации.
- Используйте Service Layer для бизнес-логики. Контроллеры должны только принимать HTTP-запросы и передавать данные в сервисы. Основную бизнес-логику лучше размещать в отдельных сервисных классах. Это позволяет избежать так называемых “fat controllers”, упрощает повторное использование кода и делает систему более модульной.
- Используйте Form Request для валидации. Laravel позволяет вынести правила проверки данных в отдельные классы запросов. Это делает контроллеры компактнее, снижает дублирование кода и позволяет централизованно управлять логикой валидации.
- Пишите автоматизированные тесты. Laravel имеет встроенную поддержку тестирования через PHPUnit. Рекомендуемая структура тестов:
tests/
Feature/
Unit/
Feature-тесты проверяют работу HTTP-запросов, маршрутов и контроллеров, а Unit-тесты используются для проверки отдельных классов и бизнес-логики.
- Используйте кэширование в production. Laravel предоставляет команды для кэширования конфигурации и маршрутов, что значительно повышает производительность приложения:
php artisan config:cache
php artisan route:cache
php artisan view:cache
Кэширование уменьшает количество операций чтения конфигурационных файлов и ускоряет обработку HTTP-запросов.
- Избегайте прямого использования .env в коде. Переменные окружения должны использоваться только в конфигурационных файлах. В коде следует обращаться к ним через config(), чтобы избежать проблем с кэшированием.
- Придерживайтесь стандартной структуры Laravel. Даже при росте проекта лучше расширять стандартную архитектуру с помощью сервисов, доменных модулей или пакетов, а не изменять базовую структуру директорий фреймворка.
- Используйте очереди для ресурсоёмких задач. Такие операции, как отправка email, генерация отчетов или интеграции с API, лучше выполнять через систему очередей, чтобы не блокировать основной HTTP-запрос.
Развертывание Laravel-проекта
После завершения локальной разработки проект Laravel необходимо корректно подготовить к запуску на сервере. Деплой включает не только копирование файлов в production-среду, но и правильную настройку веб-сервера, прав доступа, конфигурации приложения и оптимизацию производительности. Если пропустить эти шаги, даже технически исправный проект может работать нестабильно, медленно или небезопасно. Поэтому важно понимать, как развернуть Laravel-проект правильно.
- Настройка веб-сервера
Laravel устроен так, что единственной публичной точкой входа в приложение является директория public. В ней находится файл index.php, через который обрабатываются все HTTP-запросы.
Веб-сервер должен быть настроен так, чтобы корневая директория сайта указывала на:
/public/index.php
Это важно по двум причинам. Во-первых, такой подход обеспечивает корректную маршрутизацию всех запросов через Laravel. Во-вторых, он повышает безопасность, так как внутренние файлы фреймворка, конфигурации и служебные директории не будут доступны напрямую через браузер. Для Nginx или Apache необходимо указывать public/ в качестве document root. Если сервер настроен на корень всего проекта, это может открыть доступ к служебным файлам и создать серьёзные риски безопасности. - Права доступа
Для корректной работы Laravel веб-сервер должен иметь права на запись в несколько служебных директорий, прежде всего:
storage
bootstrap/cache
В директории storage Laravel хранит логи, кэш, сессии и пользовательские файлы, а bootstrap/cache используется для кэширования конфигураций и служебных данных. Если у сервера нет прав на запись в эти папки, приложение может выдавать ошибки, не записывать логи или некорректно работать с кэшем. Поэтому перед запуском проекта в production необходимо проверить владельца и права доступа к этим директориям. Конкретный способ зависит от операционной системы, конфигурации сервера и пользователя, от имени которого работает PHP-FPM или Apache. - Оптимизация перед production
Laravel предоставляет встроенные инструменты для оптимизации приложения перед запуском в production. Базовая команда:
php artisan optimize
Эта команда подготавливает приложение к production-среде, кэшируя часть служебных данных и уменьшая накладные расходы при обработке запросов. В результате приложение запускается быстрее и работает стабильнее под нагрузкой. В production также часто дополнительно используют кэширование конфигурации, маршрутов и представлений, особенно если деплой автоматизирован через CI/CD. - Отключение debug
Одно из обязательных требований перед развертыванием Laravel-проекта – отключить режим отладки. В файле .env необходимо указать:
APP_DEBUG=false
Если оставить APP_DEBUG=true, пользователи смогут видеть технические сообщения об ошибках, стек вызовов, пути к файлам и часть внутренней логики системы, что создает серьёзные риски безопасности. В production-режиме ошибки должны логироваться в файлы, а не отображаться на странице. - Автоматизация деплоя
Перенос проекта Laravel, при условии, что -приложение небольшое, иногда выполняется вручную, однако для командной разработки и регулярных релизов гораздо эффективнее использовать автоматизацию. В экосистеме Laravel популярны следующие подходы:- Laravel Forge – для быстрой настройки серверов и автоматизированного деплоя на VPS;
- Laravel Vapor – для масштабируемой serverless-инфраструктуры на базе AWS;
- CI/CD через GitHub Actions или GitLab CI.
Заключение
Laravel позволяет быстро создавать масштабируемые веб-приложения благодаря понятной структуре, CLI-инструментам и мощной экосистеме. В этой статье мы рассмотрели создание Laravel-проекта, структуру фреймворка, примеры кода, лучшие практики разработки и базовый процесс развертывания. Лучший способ понять Laravel – создать собственный проект и поработать с его архитектурой на практике.
Если вам нужна разработка сайта на Laravel, команда Asabix поможет реализовать проект полного цикла – от проектирования архитектуры до запуска в production. Мы создаём масштабируемые веб-системы, интегрируем сторонние сервисы и помогаем бизнесу строить надёжные цифровые платформы.
Обратитесь в Asabix, чтобы обсудить ваш Laravel-проект.
Читайте также другие статьи в нашем блоге