1 of 85

Les meilleurs

bundles et outils pour vos applications Symfony

2 of 85

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

3 of 85

01

03

04

Enjeux

Meilleurs bundles et outils

Sommaire

02

Package Principles

Critères de sélection

4 of 85

  1. Enjeux

5 of 85

5

Enjeux CONTEXTE

Monolithe

Micro Services

Projet simple

6 of 85

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

7 of 85

2. Les meilleurs bundles et outils

8 of 85

8

Les meilleurs bundles CATÉGORIES

Infrastructure du projet (Analyse statique, hook git)

Couverture du domaine fonctionnel

9 of 85

2.1. Infrastructure du projet

10 of 85

10

Analyse statique

de style

  1. PHP CS Fixer

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

11 of 85

2. PHP Mess Detector phpmd/phpmd (tool)

Bugs possibles

Complexité cyclomatique

Paramètres, méthodes inutilisés

Analyse statique

ruleset

12 of 85

12

3. PHP Stan (Static Analysis Tool)

phpstan/phpstan

basé sur PHP Parser par Nikita Popov

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 of 85

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 of 85

14

4. GrumPHP

phpro/grumphp (package)

PHP Fixer

PHP MD

PHP Stan

….

Hook git local

client-side

15 of 85

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 of 85

16

Hook git local

server-side

17 of 85

17

Hook git local

server-side

18 of 85

Démonstration

19 of 85

19

Outils de qualité

Plus loin que l’analyse statique

  • sécurité
  • performance
  • maintenabilité
  • robustesse
  • architecture

20 of 85

20

Outils de qualité

Symfony Insight

21 of 85

Tests automatisés

&

Fixtures

22 of 85

22

Unit tests

&

Behaviour Driven Development

5. PHPUnit

sebastianbergmann/phpunit

6. Behat

Behat/BehatBundle

Les plus populaires

23 of 85

23

Browser automation

7. Symfony Panther

symfony/panther

Emulation du web browser

  • composant BrowserKit
  • composant DomCrawler

Installation d’un navigateur

Installation d’un serveur Selenium

Installation d’un pilote ou extension

24 of 85

24

Tests API REST et SOAP

8. Codeception

Codeception/Codeception

basé sur PHPUnit

  • Acceptance Testing
  • REST & SOAP API Testing
  • Unit Testing
  • Bonne alternative à Behat pour les tests des API

25 of 85

25

Tests API REST et SOAP

Codeception

26 of 85

26

Fixtures

9. AliceBundle

hautelook/AliceBundle

basé sur nelmio/alice & fzaninotto/faker

php bin/console hautelook:fixtures:load

27 of 85

27

Fixtures

10. DoctrineFixturesBundle

doctrine/doctrine-fixtures-bundle

28 of 85

2.2. Couverture du domaine fonctionnel

29 of 85

29

Couverture du domaine fonctionnel

API REST

Base de données

Gestion des médias

Générateur d’admin

Process Asynchrones

Monitoring

30 of 85

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 of 85

31

API REST

Implémentation

FOSRestBundle

friendsofsymfony/rest-bundle

11. API Platform Framework

api-platform/api-platform

Outils pour construire et consommer des APIs

32 of 85

32

API Platform

33 of 85

33

API Platform

34 of 85

34

API REST

Documentation

12. NelmioApiDocBundle nelmio/NelmioApiDocBundle

Documentation au format OpenAPI

Jordi Boggiano créateur de composer

35 of 85

35

API REST

Documentation

36 of 85

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

  • Curl (par défaut)
  • PHP Stream Wrapper
  • Socket

37 of 85

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

  • Logger
  • Profiler
  • Mock
  • Cache

38 of 85

38

API REST

Http Client

15. HTTP Client Component

symfony/http-client

Experimental feature

  • Appels HTTP asynchrones et synchrones
  • Méthodes puissantes
  • Simple d’implémentation

VS Guzzle

39 of 85

39

API REST

Http Client

Guzzle

40 of 85

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

41 of 85

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 of 85

42

Base de données

Entité

18. DoctrineExtensions

stof/StofDoctrineExtensionsBundle

Gedmo Doctrine2 extensions

43 of 85

43

Base de données

Migration

19. symfony/orm-pack

Doctrine orm + Doctrine Migrations

44 of 85

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

45 of 85

Démonstration

Algolia

46 of 85

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 of 85

47

Gestion des médias

-

File system

Couches d’abstraction du file system

  • et Comment

sont stockés les médias

  • Migration de fichiers

SANS impact dans le code

48 of 85

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 of 85

49

Gestion des médias

Flysystem

50 of 85

50

Gestion des médias

config/packages/oneup_flysystem.yaml

config/services.yaml

51 of 85

51

Gestion des médias

Flysystem

App\Controller\SpeakerController - Implémentation

Uniquement

52 of 85

52

Gestion des médias

Flysystem

$flysystem

-> write

-> put

-> read

-> delete

-> xxxStream (ex. writeStream)

-> copy

-> rename

-> createDir

-> deleteDir

-> listContents

...

53 of 85

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 of 85

54

Glide (HTTP based image manipulations)

Orientation

Gestion des médias

55 of 85

55

Glide (HTTP based image manipulations)

Effets

Gestion des médias

56 of 85

56

Glide (HTTP based image manipulations)

Cropped

Gestion des médias

57 of 85

57

Glide (HTTP based image manipulations)

Gestion des médias

58 of 85

01

03

04

API REST

Base de données

Gestion des fichiers

02

Génération d’admin

05

06

Process Asynchrones

Monitoring

59 of 85

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 of 85

60

Génération d’admin

config/packages/easy_admin.yaml

Interface

61 of 85

01

03

04

API REST

Base de données

Gestion des fichiers

02

Génération d’admin

05

06

Process Asynchrones

Monitoring

62 of 85

62

Processus

Asynchrones

63 of 85

63

26. PHP Amqlib

php-amqlib/RabbitMqBundle

28. Composant Messenger

27. Enqueue

php-enqueue/enqueue-bundle

Processus

Asynchrones

64 of 85

64

Processus Asynchrones

Outil

RabbitMQ as a Service

65 of 85

65

Processus Asynchrones

Outil

https://bullfrog.rmq.cloudamqp.com/#/queues/luxqayxm/algolia

consumer

php bin/console rabbitmq:consumer algolia

messages

66 of 85

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 of 85

67

29. Monolog

monolog/monolog

  • fichiers et syslog

stream, rotating file

  • envoi d’alertes et d’emails

slack, hipChat,swiftMailer

  • envoi aux serveurs spécifiques

Amqp, NewRelic, AWS SQS, Socket, Gelf…

  • stockage en base de données

MonogDB, Redis, ElasticSearch

  • affichage dans les consoles

(navigateur)

Gestion des logs

Monolog

68 of 85

68

config/packages/dev/monolog.yaml

Gestion des logs

Monolog

69 of 85

69

30. Sentry

sentry/sentry-symfony

Real-time crash reporting

Sentry

70 of 85

70

Sentry

71 of 85

3. Critères de sélection

72 of 85

72

Source

Packagist

73 of 85

73

Source

Symfony Recipes Server

74 of 85

74

Métriques

Nombre de downloads

Nombre de contributeurs

Nombre de stars

Date du dernier commit

75 of 85

75

Critères de sélection MÉTRIQUE

Github

76 of 85

76

Critères de sélection MÉTRIQUE

Packagist

77 of 85

Généralisons ...

78 of 85

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

79 of 85

4. The Packages Principles

80 of 85

“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 of 85

81

Principes de cohésion

Granularité

Principe de couplage

Stabilité et Dépendance

Package Principes

82 of 85

82

Stabilité

Degré de flexibilité

Abstraction

Simplicité d’évolution

Couplage

Interdépendance entre les packages

Package Principes

Caractéristiques

83 of 85

https://en.wikipedia.org/wiki/Package_principles

84 of 85

En conclusion

--

Richesse fonctionnelle de l’écosystème PHP

Contribution à l’open source

Packages principles -> aide aux choix rationnels

85 of 85

Merci / questions

Les meilleurs bundles et outils - Danielle KAYUMBI BONKOTO