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
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
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)
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
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);
}
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
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
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',
];
}
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
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"
]
}
}
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