Установка Laravel и структура проекта

Установка Laravel занимает одну команду, а понимание структуры каталогов — ключ к тому, чтобы не потеряться в проекте.

Суть: проект ставится через Composer, а каждая папка отвечает за свою зону ответственности — код в app/, маршруты в routes/, шаблоны в resources/, настройки в config/.

Прежде чем писать код, нужно поднять рабочий проект. Laravel ставится менеджером зависимостей Composer — это инструмент, который скачивает фреймворк и все его библиотеки. После установки у вас появляется десяток каталогов, и поначалу легко растеряться. Но структура логична: разобравшись один раз, вы будете точно знать, куда класть каждый файл.

Laravel 11 (2024 год) принёс облегчённую структуру: исчезли файлы app/Http/Kernel.php и app/Console/Kernel.php, а вся их конфигурация переехала в один файл bootstrap/app.php. Это сделало проект чище и понятнее для новичков.

Установка

Для старта нужны PHP 8.2+ и Composer. Создаём проект одной командой:

# через установщик laravel
composer global require laravel/installer
laravel new myshop

# или напрямую через composer
composer create-project laravel/laravel myshop

# запуск локального сервера
cd myshop
php artisan serve

После php artisan serve приложение доступно на http://127.0.0.1:8000. Команда artisan — это «швейцарский нож» Laravel: с её помощью генерируют классы, запускают миграции, чистят кэш и многое другое.

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

Вот карта основных папок, с которыми вы будете работать каждый день:

  myshop/
  |-- app/            <- ваш PHP-код (модели, контроллеры)
  |   |-- Http/Controllers/
  |   '-- Models/
  |-- bootstrap/
  |   '-- app.php     <- конфигурация приложения (L11)
  |-- config/         <- настройки (база, почта, кэш)
  |-- database/
  |   |-- migrations/ <- версии структуры БД
  |   '-- seeders/    <- наполнение тестовыми данными
  |-- public/         <- точка входа index.php, ассеты
  |-- resources/
  |   '-- views/      <- шаблоны Blade
  |-- routes/
  |   |-- web.php     <- веб-маршруты
  |   '-- console.php <- команды и расписание
  '-- .env            <- секреты окружения

Как работает под капотом

Файл .env хранит настройки окружения: пароль к базе, ключ приложения, режим отладки. Их нельзя коммитить в git — они у каждого разработчика свои. Файлы из config/ читают значения из .env через хелпер env(). А bootstrap/app.php в Laravel 11 — это центр сборки приложения: здесь подключаются маршруты, регистрируется middleware и настраивается обработка ошибок.

<?php
// bootstrap/app.php (Laravel 11) — единый центр конфигурации
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // здесь регистрируют свои middleware
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // здесь настраивают обработку ошибок
    })->create();

Чтобы прочувствовать идею «у каждой папки своя роль», смоделируем простой роутинг конфигурации на Python — словарь отвечает за то, какой раздел проекта обрабатывает какую задачу.

Попробуй сам ▶

# Карта ответственности каталогов Laravel
structure = {
    'routes/':    'какой URL -> какой код',
    'app/':       'модели и контроллеры (логика)',
    'resources/': 'шаблоны Blade (внешний вид)',
    'database/':  'миграции и сидеры',
    'config/':    'настройки приложения',
}

task = 'хочу изменить вид страницы'
for folder, role in structure.items():
    mark = '<==' if folder == 'resources/' else ''
    print(f'{folder:12} {role} {mark}')
print('Вывод:', task, '-> правим resources/')

Частые ошибки

  • Коммитить .env в git. Это утечка паролей. Файл всегда в .gitignore; для команды есть .env.example.
  • Открывать сайт по пути к корню проекта. Веб-сервер должен смотреть только в папку public/, иначе любой увидит ваш код.
  • Забыть php artisan key:generate. Без ключа приложения шифрование и сессии не работают (при laravel new он создаётся автоматически).

Best practices

  • Держите секреты только в .env, а в коде читайте их через config(), а не напрямую через env().
  • Изучите команды php artisan list — там десятки полезных генераторов.
  • Не правьте файлы фреймворка в vendor/ — они перезаписываются при обновлении.

Итог: проект ставится одной командой Composer, а понятная структура каталогов помогает сразу знать, куда положить код, шаблон или настройку. Дальше разберём, как именно запрос проходит весь путь до ответа.

Проверьте себя
1. Где в Laravel 11 находится центральная конфигурация приложения вместо удалённых Kernel.php?
Aapp/Http/Kernel.php
Bbootstrap/app.php
Cconfig/kernel.php
Dpublic/index.php
2. Какой файл хранит секреты окружения и не должен попадать в git?
Aconfig/app.php
B.env
Ccomposer.json
Droutes/web.php