Skip to content

Laravel

Vue d'ensemble

Laravel est un framework PHP moderne et élégant qui simplifie le développement d'applications web robustes avec une syntaxe expressive et des outils puissants.

Avantages clés

  • Eloquent ORM : Mapping objet-relationnel intuitif
  • Artisan CLI : Outils en ligne de commande
  • Blade : Moteur de templates puissant
  • Ecosystem : Forge, Vapor, Nova, Horizon

Architecture MVC

// Model
class User extends Model
{
    protected $fillable = ['name', 'email'];

    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Controller
class UserController extends Controller
{
    public function index()
    {
        return User::with('posts')->paginate(20);
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users'
        ]);

        return User::create($validated);
    }
}

// Route
Route::apiResource('users', UserController::class);

Intégration avec React

// API Resource
class UserResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'posts_count' => $this->posts_count,
            'created_at' => $this->created_at->toISOString(),
        ];
    }
}

// API Controller pour React
class ApiUserController extends Controller
{
    public function index()
    {
        return UserResource::collection(
            User::withCount('posts')->paginate(20)
        );
    }
}

Testing avec Pest

// tests/Feature/UserTest.php
it('can create a user', function () {
    $userData = [
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ];

    $response = $this->postJson('/api/users', $userData);

    $response->assertStatus(201)
            ->assertJsonFragment($userData);

    $this->assertDatabaseHas('users', $userData);
});

it('validates user creation', function () {
    $response = $this->postJson('/api/users', []);

    $response->assertStatus(422)
            ->assertJsonValidationErrors(['name', 'email']);
});

Monitoring avec Prometheus

// Middleware pour métriques
class PrometheusMiddleware
{
    public function handle($request, Closure $next)
    {
        $start = microtime(true);
        $response = $next($request);
        $duration = microtime(true) - $start;

        // Incrémenter compteur requêtes
        app('prometheus')->incrementCounter(
            'laravel_http_requests_total',
            [$request->method(), $response->getStatusCode()]
        );

        // Enregistrer durée
        app('prometheus')->observeHistogram(
            'laravel_http_request_duration_seconds',
            $duration,
            [$request->route()->getName()]
        );

        return $response;
    }
}

Ressources