Les meilleurs
bundles et outils pour vos applications Symfony
Expériences
Smart Attendance
SensioLabs
Quotatis
Ekino
Wynd
Sidexa
PHP Tour Nantes 2017
CEO DK Wave Technology
Freelance Developer Symfony 4
Speaker PHP Tour Nantes 2017
Danielle KAYUMBI BONKOTO
dkwavetechnology.fr
@danielleKayumbi
@dkwavetech
danielle.kayumbi@dkwavetechnology.fr
Freelance Developer Symfony 4
CEO DK Wave Technology
Speaker
01
03
04
Enjeux
Meilleurs bundles et outils
Sommaire
02
Package Principles
Critères de sélection
5
Enjeux CONTEXTE
Monolithe
Micro Services
Projet simple
6
Enjeux POINTS CLÉS
Concevoir une architecture technique solide
Garantir la qualité du code
Simplifier la vie des développeurs
Améliorer la productivité
Optimiser les coûts
2. Les meilleurs bundles et outils
8
Les meilleurs bundles CATÉGORIES
Infrastructure du projet (Analyse statique, hook git)
Couverture du domaine fonctionnel
2.1. Infrastructure du projet
10
Analyse statique
de style
FriendsOfPHP/PHP-CS-Fixer (tool)
Règles de style - PSR, Syntaxe PHP 7, ...
Correction automatique
Utilisé dans Symfony
Fabien Potencier - contributeur
Code Sniffer
squizlabs/PHP_CodeSniffer
2. PHP Mess Detector phpmd/phpmd (tool)
Bugs possibles
Complexité cyclomatique
Paramètres, méthodes inutilisés
Analyse statique
ruleset
12
Analyse statique
Détection des erreurs avant exécution
Rapide 6000 fichiers qlq Mo < 1 minute
Extensible (adaptation aux besoins)
Focus tests unitaires importants
13
Hook git
client-side & server side
Hooks Locaux
pre-commit
post-commit
(envoi de notifications)
pre-commit-msg
(numéro jira inclus ?…)
pre-rebase
pre-push
pre-receive
post-receive
update
Hooks Distants
(Intégration Continue)
14
4. GrumPHP
phpro/grumphp (package)
PHP Fixer
PHP MD
PHP Stan
….
Hook git local
client-side
15
fabbot.io
Validation service for github pull requests
PHP Coding standards (PSR-1, PSR-2)
Exécution de PHP CS Fixer
Optimisation des appels PHPUnit
Correction des typos
Check des formats JSON et YAML
Check des permissions des fichiers
...
Hook git local
server-side
16
Hook git local
server-side
17
Hook git local
server-side
Démonstration
19
Outils de qualité
Plus loin que l’analyse statique
20
Outils de qualité
Symfony Insight
Tests automatisés
&
Fixtures
22
Unit tests
&
Behaviour Driven Development
Les plus populaires
23
Browser automation
Emulation du web browser
Installation d’un navigateur
Installation d’un serveur Selenium
Installation d’un pilote ou extension
24
Tests API REST et SOAP
25
Tests API REST et SOAP
Codeception
26
Fixtures
9. AliceBundle
hautelook/AliceBundle
basé sur nelmio/alice & fzaninotto/faker
php bin/console hautelook:fixtures:load
27
Fixtures
10. DoctrineFixturesBundle
doctrine/doctrine-fixtures-bundle
2.2. Couverture du domaine fonctionnel
29
Couverture du domaine fonctionnel
API REST
Base de données
Gestion des médias
Générateur d’admin
Process Asynchrones
Monitoring
01
03
04
API REST
Base de données
Gestion des médias
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
31
API REST
Implémentation
FOSRestBundle
friendsofsymfony/rest-bundle
32
API Platform
33
API Platform
34
API REST
Documentation
12. NelmioApiDocBundle nelmio/NelmioApiDocBundle
Documentation au format OpenAPI
Jordi Boggiano créateur de composer
35
API REST
Documentation
36
API REST
Http Client
13. Guzzle
guzzle/guzzle
Consommer des web services facilement
Couche d’abstraction pour les requêtes HTTP
Simplicité d’intégration
Requêtes asynchrones
Multiples Adaptateurs HTTP Client
37
API REST
Http Client
14. CSA Guzzle
csa/guzzle-bundle
Intégration de guzzle
Configuration simple d’un client Guzzle
Services description for describing services in json
Multiple middleware/subscribers
38
API REST
Http Client
15. HTTP Client Component
symfony/http-client
Experimental feature
VS Guzzle
39
API REST
Http Client
Guzzle
40
API REST
Sécurisation
16. JWT (Json Web Token)
lexik/LexikJWTAuthenticationBundle
Authentification par jeton JWT
17. OAuth
hwi/HWIOAuthBundle
Authentification client oauth - 58 providers
thephpleague/oauth2-server
Implémentation oauth2 server
01
03
04
API REST
Base de données
Gestion des médias
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
42
Base de données
Entité
43
Base de données
Migration
19. symfony/orm-pack
Doctrine orm + Doctrine Migrations
44
Base de données
Moteur de recherche
20. Elastic Search
FriendsOfSymfony/FOSElasticaBundle
Intégration de la librairie Elastica
21. Algolia
algolia/search-bundle
Solution SaaS rapide et simple
Démonstration
Algolia
01
03
04
API REST
Base de données
Gestion des médias
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
47
Gestion des médias
-
File system
Couches d’abstraction du file system
sont stockés les médias
SANS impact dans le code
48
22. Flysystem (abstraction file system local et distant)
thephpleague/flysystem (librairie)
1up-lab/OneupFlysystemBundle (Intégration Symfony)
Interface unique
Similaire à Gaufrette (KnpLabs)
Adaptateurs (plus que Gaufrette)
AWS S3, Azur, Dropbox, SFTP, Local, Custom,
Redis, Google Drive, Google Cloud, GridFS ...
Gestion des médias
-
File system
49
Gestion des médias
Flysystem
50
Gestion des médias
config/packages/oneup_flysystem.yaml
config/services.yaml
51
Gestion des médias
Flysystem
App\Controller\SpeakerController - Implémentation
Uniquement
52
Gestion des médias
Flysystem
$flysystem
-> write
-> put
-> read
-> delete
-> xxxStream (ex. writeStream)
-> copy
-> rename
-> createDir
-> deleteDir
-> listContents
...
53
23. Glide (HTTP based image manipulations)
thephpleague/glide (librairie)
thephpleague/glide-symfony (Adaptater Symfony)
Manipulation d’images
Basée sur des API REST (cf Cloudinary)
Implémente Flysystem
Framework - agnostic
Gestion des médias
54
Glide (HTTP based image manipulations)
Orientation
Gestion des médias
55
Glide (HTTP based image manipulations)
Effets
Gestion des médias
56
Glide (HTTP based image manipulations)
Cropped
Gestion des médias
57
Glide (HTTP based image manipulations)
Gestion des médias
01
03
04
API REST
Base de données
Gestion des fichiers
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
59
Génération d’admin
24. Sonata
sonata-project/SonataAdminBundle
Richesse fonctionnelle
Configuration par classes/services
25. EasyAdmin
EasyCorp/EasyAdminBundle
Mvp du back office
Flexible
Configuration par yml
60
Génération d’admin
config/packages/easy_admin.yaml
Interface
01
03
04
API REST
Base de données
Gestion des fichiers
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
62
Processus
Asynchrones
63
26. PHP Amqlib
php-amqlib/RabbitMqBundle
28. Composant Messenger
27. Enqueue
php-enqueue/enqueue-bundle
Processus
Asynchrones
64
Processus Asynchrones
Outil
RabbitMQ as a Service
65
Processus Asynchrones
Outil
https://bullfrog.rmq.cloudamqp.com/#/queues/luxqayxm/algolia
consumer
php bin/console rabbitmq:consumer algolia
messages
01
03
04
API REST
Base de données
Gestion des médias
02
Génération d’admin
05
06
Process Asynchrones
Monitoring
67
29. Monolog
monolog/monolog
stream, rotating file
slack, hipChat,swiftMailer
Amqp, NewRelic, AWS SQS, Socket, Gelf…
MonogDB, Redis, ElasticSearch
(navigateur)
Gestion des logs
Monolog
68
config/packages/dev/monolog.yaml
Gestion des logs
Monolog
69
30. Sentry
sentry/sentry-symfony
Real-time crash reporting
Sentry
70
Sentry
3. Critères de sélection
72
Source
Packagist
73
Source
Symfony Recipes Server
74
Métriques
Nombre de downloads
Nombre de contributeurs
Nombre de stars
Date du dernier commit
75
Critères de sélection MÉTRIQUE
Github
76
Critères de sélection MÉTRIQUE
Packagist
Généralisons ...
78
Package Principes
Michael Feather & Robert Cecil Martins
Principes de base du paradigme OO
Principes de design de classe SOLID
Single Responsability
Open closed
Liskov Substitution
Interface segregation
Dependency inversion
4. The Packages Principles
“Classes are a necessary, but insufficient, means of organizing a design. The larger granularity of packages are needed to help bring order.”
ROBERT CECIL MARTINS
81
Principes de cohésion
Granularité
Principe de couplage
Stabilité et Dépendance
Package Principes
82
Stabilité
Degré de flexibilité
Abstraction
Simplicité d’évolution
Couplage
Interdépendance entre les packages
Package Principes
Caractéristiques
https://en.wikipedia.org/wiki/Package_principles
En conclusion
--
Richesse fonctionnelle de l’écosystème PHP
Contribution à l’open source
Packages principles -> aide aux choix rationnels
Merci / questions
Les meilleurs bundles et outils - Danielle KAYUMBI BONKOTO