SlideShare a Scribd company logo
1 of 47
Download to read offline
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 1/47
SYMFONYSYMFONY VSVS
LARAVELLARAVEL
AFUP MONTPELLIERAFUP MONTPELLIER
Meetup du 17 avril 2019 - 1001pharmacies.com
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 2/47
SOMMAIRESOMMAIRE
Présentation générale
Injection de dépendances
Base de données
Templating
Validation et formulaires
Intégration de code tiers
Communauté et écosystème
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 3/47
EN CHIFFRESEN CHIFFRES
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 4/47
DISTRIBUTION DES SPÉCIALITÉS -DISTRIBUTION DES SPÉCIALITÉS -
BAROMÈTRE AFUP 2018BAROMÈTRE AFUP 2018
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 5/47
GOOGLE TREND - EVOLUTION DESGOOGLE TREND - EVOLUTION DES
RECHERCHESRECHERCHES
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 6/47
GOOGLE TREND - RÉPARTITIONGOOGLE TREND - RÉPARTITION
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 7/47
PRÉSENTATIONPRÉSENTATION
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 8/47
LARAVELLARAVEL
Développé par Taylor Otwell en 2011 
Première LTS (5.1 en 2015)
Privilégie la simplicité du code
Framework "tout en un"
Laravel Lumen pour une version micro
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 9/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 10/47
Développé par SensioLabs / Symfony SAS
56 composants indépendants
Routing
Security
Dependency injection
Grosse communauté
Micro framework first
Symfony Flex
Ajout des briques nécessaires au projet une à une
symfony/skeleton et symfony/website-skeleton
Il se base, dès que possible, sur les RFC ou les
conventions les plus utilisées (PSR)
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 11/47
INJECTION DEINJECTION DE
DÉPENDANCEDÉPENDANCE
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 12/47
SYMFONYSYMFONY
Symfony a un composant
qui peut être utilisé dans n’importe quel
projet. Drupal, API Platform, phpBB l’utilisent.
Permet de découper son code en multiples services
indépendants et réutilisables dans toute
l’application.
Base fondamentale du framework
symfony/dependency-
injection
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 13/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 14/47
LARAVELLARAVEL
namespace AppHttpControllers;
use AppUsersRepository 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.
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 15/47
LARAVELLARAVEL
SERVICE CONTAINERSERVICE CONTAINER
namespace AppProviders;
use IlluminateSupportServiceProvider;
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'));
});
}
}
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 16/47
BASE DE DONNÉESBASE DE DONNÉES
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 17/47
LARAVELLARAVEL
L'ORM utilisé par laravel est interne au framework et
se nomme Eloquent ORM.
Il est basé sur le pattern Active Record. Il y a pas de
séparation entre model et repository (par défaut).
$post = new Post();
$post->name = "Mon article";
$post->save();
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 18/47
namespace App;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
protected $fillable = ['name'];
public function category()
{
return $this->belongsTo('AppCategory')
}
public function tags()
{
return $this->belongsToMany('AppRole');
}
public function scopeActive($query)
{
return $query->where('online', 1);
}
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 19/47
// Query builder
$posts = AppPost::where('online', 1)
->orderBy('created_at', 'desc')
->take(10)
->get();
// Manipulation
$post = $posts[0];
$post->online = false;
$post->save();
// Relations
$comment = new AppComment(['message' => 'A new comment.']);
$post->comments()->save($comment);
// Suppression
$post->delete();
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 20/47
SYMFONYSYMFONY
est utilisé et recommandé par Symfony.
C’est un ORM (Object Relational Mapping). On
manipule des objets PHP à travers un repository.
La base de données est complètement abstraite, il
ne faut plus réfléchir en base de données mais en
objets.
Doctrine
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 21/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 22/47
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 23/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 24/47
TEMPLATINGTEMPLATING
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 25/47
SYMFONY : TWIGSYMFONY : TWIG
, développé par SensioLabs. C’est un moteur de
template d’une grande flexibilité et simplicité.
Il reprend quelques concepts du développement
objet : il est possible d’étendre les templates et de
les inclure.
Il fournit des instructions de contrôle similaires au
php : boucles, conditions, tout en ajoutant quelques
fonctionnalités.
Il a un langage et une syntaxe propre, compilée en
PHP.
Twig
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 26/47
SYMFONY : TWIGSYMFONY : TWIG
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 27/47
SYMFONY : TWIGSYMFONY : TWIG
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 28/47
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 29/47
SYMFONY : TWIGSYMFONY : TWIG
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 30/47
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 31/47
LARAVEL : BLADELARAVEL : BLADE
<html>
<head>
<title>Mon app - @yield('title')</title>
</head>
<body>
@section('sidebar')
La sidebar principale
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 32/47
LARAVEL : BLADELARAVEL : BLADE
@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
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 33/47
VALIDATION ETVALIDATION ET
FORMULAIRESFORMULAIRES
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 34/47
LARAVELLARAVEL
Laravel n'intègre aucun système pour "représenter"
les formulaire
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 35/47
LARAVELLARAVEL
La validation peut se faire manuellement pour traiter
les données.
$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();
}
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 36/47
LARAVELLARAVEL
La validation peut se faire automatiquement gràce au
type-hinting et à un objet Request spécifique
// Côté controller
public function store(StoreBlogPost $request)
{
$validated = $request->validated();
}
// Dans le StoreBlogPost.php
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 37/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 38/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 39/47
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 40/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 41/47
INTÉGRATION DEINTÉGRATION DE
CODE TIERSCODE TIERS
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 42/47
SYMFONYSYMFONY
Symfony possède un système de Bundle qui
permettent d’ajouter des fonctionnalités au projet.
Des simples comme
ou des beaucoup plus complexes comme ,
ou .
Ils fournissent différents services flexibles qu’il nous
suffit de réutiliser
Il est souvent possible d’étendre ou réécrire des
morceaux de ces fonctionnalités si la solution
trouvée ne colle pas parfaitement au besoin.
LexikJWTAuthenticationBundle
Sonata
EasyAdmin API Platform
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 43/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 44/47
SYMFONYSYMFONY
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 45/47
LARAVELLARAVEL
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
{
"extra": {
"laravel": {
"providers": [
"BarryvdhCorsServiceProvider"
]
}
}
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 46/47
COMMUNAUTÉ ETCOMMUNAUTÉ ET
ÉCOSYSTÈMEÉCOSYSTÈME
29/04/2019 Symfony / Laravel
file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 47/47
SYMFONYSYMFONY
Symfony est fort d’une communauté internationale
Beaucoup de Bundles disponibles et de projets
importants tels API Platform, Sonata, EasyAdmin
Flex : plugin Composer qui permet l’automatisation
de l’installation de certains bundles.
Symfony vit surtout grâce à la vente de formations,
certifications, expertises et SAAS comme Blackfire,
SecurityMonitoring, SymfonyCloud

More Related Content

More from Julien Vinber

Swoole Meetup AFUP¨Montpellier 27/01/2021
Swoole   Meetup  AFUP¨Montpellier 27/01/2021Swoole   Meetup  AFUP¨Montpellier 27/01/2021
Swoole Meetup AFUP¨Montpellier 27/01/2021Julien Vinber
 
Et si on en finissait avec CRUD ?
Et si on en finissait avec CRUD ?Et si on en finissait avec CRUD ?
Et si on en finissait avec CRUD ?Julien Vinber
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
Meet up symfony 16 juin 2017 - Les PSR
Meet up symfony 16 juin 2017 -  Les PSRMeet up symfony 16 juin 2017 -  Les PSR
Meet up symfony 16 juin 2017 - Les PSRJulien Vinber
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireJulien Vinber
 
Meetup symfony 30 janvier 2017 - événement
Meetup symfony 30 janvier 2017 - événementMeetup symfony 30 janvier 2017 - événement
Meetup symfony 30 janvier 2017 - événementJulien Vinber
 

More from Julien Vinber (7)

Sulu LE CMS Ultime
Sulu LE CMS UltimeSulu LE CMS Ultime
Sulu LE CMS Ultime
 
Swoole Meetup AFUP¨Montpellier 27/01/2021
Swoole   Meetup  AFUP¨Montpellier 27/01/2021Swoole   Meetup  AFUP¨Montpellier 27/01/2021
Swoole Meetup AFUP¨Montpellier 27/01/2021
 
Et si on en finissait avec CRUD ?
Et si on en finissait avec CRUD ?Et si on en finissait avec CRUD ?
Et si on en finissait avec CRUD ?
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Meet up symfony 16 juin 2017 - Les PSR
Meet up symfony 16 juin 2017 -  Les PSRMeet up symfony 16 juin 2017 -  Les PSR
Meet up symfony 16 juin 2017 - Les PSR
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
 
Meetup symfony 30 janvier 2017 - événement
Meetup symfony 30 janvier 2017 - événementMeetup symfony 30 janvier 2017 - événement
Meetup symfony 30 janvier 2017 - événement
 

Symfony vs laravel

  • 1. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 1/47 SYMFONYSYMFONY VSVS LARAVELLARAVEL AFUP MONTPELLIERAFUP MONTPELLIER Meetup du 17 avril 2019 - 1001pharmacies.com
  • 2. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 2/47 SOMMAIRESOMMAIRE Présentation générale Injection de dépendances Base de données Templating Validation et formulaires Intégration de code tiers Communauté et écosystème
  • 3. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 3/47 EN CHIFFRESEN CHIFFRES
  • 4. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 4/47 DISTRIBUTION DES SPÉCIALITÉS -DISTRIBUTION DES SPÉCIALITÉS - BAROMÈTRE AFUP 2018BAROMÈTRE AFUP 2018
  • 5. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 5/47 GOOGLE TREND - EVOLUTION DESGOOGLE TREND - EVOLUTION DES RECHERCHESRECHERCHES
  • 6. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 6/47 GOOGLE TREND - RÉPARTITIONGOOGLE TREND - RÉPARTITION
  • 7. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 7/47 PRÉSENTATIONPRÉSENTATION
  • 8. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 8/47 LARAVELLARAVEL Développé par Taylor Otwell en 2011  Première LTS (5.1 en 2015) Privilégie la simplicité du code Framework "tout en un" Laravel Lumen pour une version micro
  • 9. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 9/47 SYMFONYSYMFONY
  • 10. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 10/47 Développé par SensioLabs / Symfony SAS 56 composants indépendants Routing Security Dependency injection Grosse communauté Micro framework first Symfony Flex Ajout des briques nécessaires au projet une à une symfony/skeleton et symfony/website-skeleton Il se base, dès que possible, sur les RFC ou les conventions les plus utilisées (PSR)
  • 11. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 11/47 INJECTION DEINJECTION DE DÉPENDANCEDÉPENDANCE
  • 12. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 12/47 SYMFONYSYMFONY Symfony a un composant qui peut être utilisé dans n’importe quel projet. Drupal, API Platform, phpBB l’utilisent. Permet de découper son code en multiples services indépendants et réutilisables dans toute l’application. Base fondamentale du framework symfony/dependency- injection
  • 13. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 13/47 SYMFONYSYMFONY
  • 14. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 14/47 LARAVELLARAVEL namespace AppHttpControllers; use AppUsersRepository 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.
  • 15. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 15/47 LARAVELLARAVEL SERVICE CONTAINERSERVICE CONTAINER namespace AppProviders; use IlluminateSupportServiceProvider; 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')); }); } }
  • 16. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 16/47 BASE DE DONNÉESBASE DE DONNÉES
  • 17. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 17/47 LARAVELLARAVEL L'ORM utilisé par laravel est interne au framework et se nomme Eloquent ORM. Il est basé sur le pattern Active Record. Il y a pas de séparation entre model et repository (par défaut). $post = new Post(); $post->name = "Mon article"; $post->save();
  • 18. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 18/47 namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model { protected $fillable = ['name']; public function category() { return $this->belongsTo('AppCategory') } public function tags() { return $this->belongsToMany('AppRole'); } public function scopeActive($query) { return $query->where('online', 1); }
  • 19. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 19/47 // Query builder $posts = AppPost::where('online', 1) ->orderBy('created_at', 'desc') ->take(10) ->get(); // Manipulation $post = $posts[0]; $post->online = false; $post->save(); // Relations $comment = new AppComment(['message' => 'A new comment.']); $post->comments()->save($comment); // Suppression $post->delete();
  • 20. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 20/47 SYMFONYSYMFONY est utilisé et recommandé par Symfony. C’est un ORM (Object Relational Mapping). On manipule des objets PHP à travers un repository. La base de données est complètement abstraite, il ne faut plus réfléchir en base de données mais en objets. Doctrine
  • 21. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 21/47 SYMFONYSYMFONY
  • 22. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 22/47
  • 23. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 23/47 SYMFONYSYMFONY
  • 24. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 24/47 TEMPLATINGTEMPLATING
  • 25. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 25/47 SYMFONY : TWIGSYMFONY : TWIG , développé par SensioLabs. C’est un moteur de template d’une grande flexibilité et simplicité. Il reprend quelques concepts du développement objet : il est possible d’étendre les templates et de les inclure. Il fournit des instructions de contrôle similaires au php : boucles, conditions, tout en ajoutant quelques fonctionnalités. Il a un langage et une syntaxe propre, compilée en PHP. Twig
  • 26. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 26/47 SYMFONY : TWIGSYMFONY : TWIG
  • 27. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 27/47 SYMFONY : TWIGSYMFONY : TWIG
  • 28. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 28/47
  • 29. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 29/47 SYMFONY : TWIGSYMFONY : TWIG
  • 30. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 30/47
  • 31. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 31/47 LARAVEL : BLADELARAVEL : BLADE <html> <head> <title>Mon app - @yield('title')</title> </head> <body> @section('sidebar') La sidebar principale @show <div class="container"> @yield('content') </div> </body> </html>
  • 32. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 32/47 LARAVEL : BLADELARAVEL : BLADE @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
  • 33. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 33/47 VALIDATION ETVALIDATION ET FORMULAIRESFORMULAIRES
  • 34. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 34/47 LARAVELLARAVEL Laravel n'intègre aucun système pour "représenter" les formulaire
  • 35. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 35/47 LARAVELLARAVEL La validation peut se faire manuellement pour traiter les données. $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(); }
  • 36. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 36/47 LARAVELLARAVEL La validation peut se faire automatiquement gràce au type-hinting et à un objet Request spécifique // Côté controller public function store(StoreBlogPost $request) { $validated = $request->validated(); } // Dans le StoreBlogPost.php public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]; }
  • 37. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 37/47 SYMFONYSYMFONY
  • 38. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 38/47 SYMFONYSYMFONY
  • 39. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 39/47
  • 40. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 40/47 SYMFONYSYMFONY
  • 41. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 41/47 INTÉGRATION DEINTÉGRATION DE CODE TIERSCODE TIERS
  • 42. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 42/47 SYMFONYSYMFONY Symfony possède un système de Bundle qui permettent d’ajouter des fonctionnalités au projet. Des simples comme ou des beaucoup plus complexes comme , ou . Ils fournissent différents services flexibles qu’il nous suffit de réutiliser Il est souvent possible d’étendre ou réécrire des morceaux de ces fonctionnalités si la solution trouvée ne colle pas parfaitement au besoin. LexikJWTAuthenticationBundle Sonata EasyAdmin API Platform
  • 43. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 43/47 SYMFONYSYMFONY
  • 44. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 44/47 SYMFONYSYMFONY
  • 45. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 45/47 LARAVELLARAVEL 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 { "extra": { "laravel": { "providers": [ "BarryvdhCorsServiceProvider" ] } }
  • 46. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 46/47 COMMUNAUTÉ ETCOMMUNAUTÉ ET ÉCOSYSTÈMEÉCOSYSTÈME
  • 47. 29/04/2019 Symfony / Laravel file:///Users/julien/Desktop/sfvslv-master/presentation.html?print-pdf#/ 47/47 SYMFONYSYMFONY Symfony est fort d’une communauté internationale Beaucoup de Bundles disponibles et de projets importants tels API Platform, Sonata, EasyAdmin Flex : plugin Composer qui permet l’automatisation de l’installation de certains bundles. Symfony vit surtout grâce à la vente de formations, certifications, expertises et SAAS comme Blackfire, SecurityMonitoring, SymfonyCloud