<?php
namespace App\Http\Controllers;
use App\Users\Repository as UserRepository;
class UserController extends Controller
{
/**
* The user repository instance.
*/
protected $users;
/**
* Create a new controller instance.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
/**
* Show the user with the given ID.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class MyServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
$this->app->singleton(Connection::class, function ($app) {
return new Connection('API_KEY'));
});
}
}
L'enregistrement des dépendances se fait au travers de ServiceProvider
Eloquent ORM, utilisé par laravel est interne au framework et se nomme.
Il est basé sur le pattern Active Record. Il y a pas de séparation entre model et repository (par défaut).
<?php
$post = new Post();
$post->name = "Mon article";
$post->save();
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['name'];
public function category()
{
return $this->belongsTo('App\Category')
}
public function tags()
{
return $this->belongsToMany('App\Role');
}
public function scopeActive($query)
{
return $query->where('online', 1);
}
}
<?php
// Query builder
$posts = App\Post::where('online', 1)
->orderBy('created_at', 'desc')
->take(10)
->get();
// Manipulation
$post = $posts[0];
$post->online = false;
$post->save();
// Relations
$comment = new App\Comment(['message' => 'A new comment.']);
$post->comments()->save($comment);
// Suppression
$post->delete();
<html>
<head>
<title>Mon app - @yield('title')</title>
</head>
<body>
@section('sidebar')
La sidebar principale
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
@extends('layouts.app')
@section('title', 'Titre de la page')
@section('sidebar')
@parent
<p>Le contenu de la sidebar</p>
@endsection
@section('content')
<h2>Liste des utilisateurs</h2>
@forelse ($users as $user)
<a href="{{ route('user', $user->id) }}">{{ $user->name }}</a>
@empty
<div>Aucun utilisateur</div>
@endforelse
@endsection
Laravel n'intègre aucun système pour "représenter" les formulaire
<?php
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => ['required', new Uppercase()],
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
La validation peut se faire manuellement pour traiter les données.
<?php
// Côté controller
public function store(StoreBlogPost $request)
{
$validated = $request->validated();
}
La validation peut se faire automatiquement gràce au type-hinting et à un objet Request spécifique
<?php
// Dans le StoreBlogPost.php
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
{
"extra": {
"laravel": {
"providers": [
"Barryvdh\\Cors\\ServiceProvider"
]
}
}
Laravel peut être étendu grâce à l'ajout de ServiceProvider qui sont exécutés au démarrage de l'application.
Cet ajout peut se faire automatiquement via une information dans le composer.json