Введение в Laravel
Laravel - это современный PHP-фреймворк с открытым исходным кодом, предназначенный для разработки веб-приложений по модели MVC (Model-View-Controller).
Ключевые особенности Laravel:
- Элегантный синтаксис
- Мощная система маршрутизации
- Встроенная система аутентификации
- ORM Eloquent для работы с базой данных
- Шаблонизатор Blade
- Миграции базы данных
- Встроенная поддержка тестирования
- Богатая экосистема (Forge, Envoyer, Horizon и др.)
История Laravel
Laravel был создан Тейлором Отвеллом в 2011 году как попытка предложить более продвинутую альтернативу фреймворку CodeIgniter. Первая стабильная версия Laravel 1 была выпущена в июне 2011 года.
Установка и настройка Laravel
Для работы с Laravel вам потребуется:
- PHP ≥ 8.0
- Composer (менеджер зависимостей для PHP)
- База данных (MySQL, PostgreSQL, SQLite или SQL Server)
- Расширения PHP: BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML
Установка через Composer
composer create-project laravel/laravel project-name
Запуск встроенного сервера
php artisan serve
Сервер запустится на http://localhost:8000
Настройка окружения
Основные настройки приложения находятся в файле .env
в корне проекта:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Маршрутизация в Laravel
Маршруты определяются в файле routes/web.php
для веб-интерфейса и routes/api.php
для API.
Базовые маршруты
Route::get('/', function () {
return view('welcome');
});
Route::post('/user', function () {
// Обработка POST запроса
});
Route::put('/user/{id}', function ($id) {
// Обработка PUT запроса
});
Route::delete('/user/{id}', function ($id) {
// Обработка DELETE запроса
});
Параметры маршрутов
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
// Необязательные параметры
Route::get('/user/{name?}', function ($name = null) {
return $name;
});
// Ограничения регулярными выражениями
Route::get('/user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
Именованные маршруты
Route::get('/user/profile', function () {
//
})->name('profile');
Контроллеры в Laravel
Контроллеры позволяют организовать логику обработки запросов в отдельных классах.
Создание контроллера
php artisan make:controller UserController
Пример контроллера
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
return view('users.index');
}
public function show($id)
{
$user = User::findOrFail($id);
return view('users.show', compact('user'));
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
]);
User::create($validated);
return redirect('/users');
}
}
Привязка контроллера к маршруту
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);
Route::post('/users', [UserController::class, 'store']);
Представления (Blade)
Blade - это мощный шаблонизатор, входящий в состав Laravel.
Создание представления
Файлы представлений хранятся в resources/views
с расширением .blade.php
.
Пример Blade-шаблона
<!DOCTYPE html>
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('sidebar')
Это главный сайдбар.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
Наследование шаблонов
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>Дополнительный контент сайдбара</p>
@endsection
@section('content')
<p>Основной контент страницы</p>
@endsection
Условные операторы и циклы
@if (count($users) === 1)
У меня один пользователь!
@elseif (count($users) > 1)
У меня несколько пользователей!
@else
У меня нет пользователей!
@endif
@foreach ($users as $user)
<p>Это пользователь {{ $user->id }}</p>
@endforeach
Миграции базы данных
Миграции - это система контроля версий для вашей базы данных.
Создание миграции
php artisan make:migration create_users_table
Пример миграции
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
Выполнение миграций
php artisan migrate
Откат миграций
php artisan migrate:rollback
Eloquent ORM
Eloquent - это реализация ActiveRecord в Laravel для работы с базой данных.
Создание модели
php artisan make:model User
Пример модели
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
}
Основные операции
// Получить всех пользователей
$users = User::all();
// Найти пользователя по ID
$user = User::find(1);
// Создать нового пользователя
$user = User::create([
'name' => 'John',
'email' => 'john@example.com',
]);
// Обновить пользователя
$user = User::find(1);
$user->name = 'New Name';
$user->save();
// Удалить пользователя
$user = User::find(1);
$user->delete();
Отношения
// Один ко многим
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
class Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
Аутентификация
Laravel предоставляет готовую систему аутентификации.
Установка аутентификации
composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
Маршруты аутентификации
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Проверка аутентификации
if (Auth::check()) {
// Пользователь аутентифицирован
}
// Получить текущего пользователя
$user = Auth::user();
Защита маршрутов
Route::get('/profile', function () {
// Доступно только аутентифицированным пользователям
})->middleware('auth');
ПО промежуточного слоя (Middleware)
Middleware обеспечивает удобный механизм для фильтрации HTTP-запросов.
Создание middleware
php artisan make:middleware CheckAge
Пример middleware
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
Регистрация middleware
В файле app/Http/Kernel.php
:
protected $routeMiddleware = [
'age' => \App\Http\Middleware\CheckAge::class,
];
Применение middleware
Route::get('/admin', function () {
//
})->middleware('age');
Создание API
Laravel позволяет легко создавать RESTful API.
Маршруты API
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{id}', [UserController::class, 'show']);
Route::put('/users/{id}', [UserController::class, 'update']);
Route::delete('/users/{id}', [UserController::class, 'destroy']);
Ресурсные контроллеры
php artisan make:controller API/UserController --api
Route::apiResource('users', 'API\UserController');
Формат ответа JSON
public function index()
{
return response()->json([
'success' => true,
'data' => User::all()
], 200);
}
Аутентификация API (Sanctum)
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Тестирование в Laravel
Laravel предоставляет удобные инструменты для тестирования.
Создание теста
php artisan make:test UserTest
Пример теста
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_be_created()
{
$response = $this->post('/users', [
'name' => 'Test User',
'email' => 'test@example.com',
]);
$response->assertStatus(201);
$this->assertDatabaseHas('users', [
'email' => 'test@example.com',
]);
}
}
Запуск тестов
php artisan test
Деплоймент Laravel-приложения
Подготовка к деплою
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
php artisan view:cache
Настройки сервера
Пример конфигурации Nginx:
server {
listen 80;
server_name example.com;
root /var/www/laravel/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Настройки .env для продакшена
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
DB_* // Настройки базы данных
REDIS_* // Настройки Redis (если используется)
MAIL_* // Настройки почты