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
- Documentation : laravel.com/docs
- Laracasts : laracasts.com