Введение в Laravel и маршрутизация
Установка фреймворка, изучение структуры директорий, настройка маршрутов (Routing) и создание базовых контроллеров для интернет-магазина.
Добро пожаловать в мир Laravel
До сих пор мы изучали чистый PHP и базовые концепции ООП. Теперь настало время перейти к профессиональной разработке с использованием фреймворка Laravel. Фреймворк — это каркас приложения, который предоставляет готовые инструменты для решения рутинных задач: маршрутизации, работы с базами данных, аутентификации и безопасности. Laravel является самым популярным PHP-фреймворком в мире благодаря своему элегантному синтаксису и мощной экосистеме.
В основе Laravel лежит архитектурный паттерн MVC (Model-View-Controller), который мы обсуждали ранее. Laravel берет на себя всю черновую работу: он автоматически загружает классы (благодаря стандарту PSR-4 и Composer), защищает от SQL-инъекций и XSS-атак, а также предоставляет удобный интерфейс командной строки (CLI) под названием Artisan. В контексте нашего интернет-магазина Laravel позволит нам сосредоточиться на бизнес-логике (например, расчете скидок или интеграции со Stripe), а не на написании кода для подключения к базе данных.
Важнейший концепт, который нужно усвоить на старте — это Жизненный цикл запроса. Когда пользователь вводит URL (например, `yoursite.com/products`), запрос попадает в единую точку входа — файл public/index.php. Оттуда он передается в маршрутизатор (Router), который решает, какой Контроллер должен обработать этот запрос. Это называется маршрутизацией. Если маршрут не найден, Laravel автоматически вернет красивую страницу с ошибкой 404.
// Пример базовой маршрутизации в Laravel (файл routes/web.php)
use Illuminate\Support\Facades\Route;
// Базовый GET-запрос. Возвращает представление (View)
Route::get('/', function () {
return view('welcome');
});
// Маршрут для каталога товаров нашего интернет-магазина
Route::get('/products', function () {
return 'Здесь будет список товаров';
});
// Маршрут с динамическим параметром (ID товара)
Route::get('/product/{id}', function ($id) {
return "Вы просматриваете товар с ID: " . $id;
});
Контроллеры: Мозг вашего приложения
Хотя мы можем возвращать текст или HTML прямо из файла маршрутов (как показано в примере выше), в реальных проектах так никогда не делают. Это нарушает принцип единственной ответственности. Файл маршрутов должен быть просто 'картой' сайта, а вся логика обработки запроса должна находиться в Контроллерах.
Контроллер — это обычный PHP-класс, который группирует связанную логику обработки HTTP-запросов. Для создания контроллеров в Laravel используется консольная утилита Artisan. Выполняя команду php artisan make:controller ProductController, вы генерируете заготовку класса в директории app/Http/Controllers.
Типичная ошибка новичков — писать огромные методы (экшены) в контроллерах, смешивая бизнес-логику, запросы к БД и форматирование данных. Контроллер должен быть 'тонким': он принимает запрос от маршрутизатора, просит Модель дать данные и передает эти данные в Представление (View). В нашем магазине ProductController будет иметь методы index() для вывода всех товаров и show($id) для вывода одного конкретного товара.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
// Метод для отображения списка товаров
public function index()
{
// В будущем здесь будет запрос к БД через Eloquent
$products = [
['id' => 1, 'name' => 'Laptop', 'price' => 1000],
['id' => 2, 'name' => 'Phone', 'price' => 500]
];
return view('products.index', ['products' => $products]);
}
}
// Как теперь выглядит маршрут в routes/web.php:
// Route::get('/products', [ProductController::class, 'index'])->name('products.index');
Какой файл в Laravel отвечает за регистрацию маршрутов, доступных через браузер (с поддержкой сессий и CSRF-защиты)?
Напишите команду Artisan для создания контроллера с именем CartController.
Задание
Сценарий: Настройка маршрутизации для корзины. Вам необходимо подготовить базовую структуру для работы с корзиной покупок.
- Откройте терминал и выполните команду php artisan make:controller CartController.
- В созданном контроллере добавьте публичный метод index(), который пока возвращает строку 'Корзина'.
- Откройте файл routes/web.php.
- Добавьте GET-маршрут '/cart', который ссылается на метод index класса CartController.
- Присвойте маршруту имя 'cart.index' с помощью метода name().