Symfony2
Symfony2, c’est quoi?
Symfony2, c’est quoi?

Ensemble de composants :
Symfony2, c’est quoi?

Ensemble de composants :



 • autonomes
Symfony2, c’est quoi?

Ensemble de composants :



 • autonomes
 • découplés
Symfony2, c’est quoi?

Ensemble de composants :



 • autonomes
 • découplés
 • cohésifs
Symfony2, c’est quoi?

Ensemble de composants :



 • autonomes
 • découplés
 • cohésifs
MVC ?
MVC ?


• Comment fonctionne le WEB ?
MVC ?


• Comment fonctionne le WEB ?
• Le WEB c’est pas du MVC !
MVC ?


• Comment fonctionne le WEB ?
• Le WEB c’est pas du MVC !
• C’est quoi alors ?
Framework HTTP
• RFC 2616
• HttpBis
• Request / Response !
• Patterns OO établis
• Architecture solide
• Awesome community
Pourquoi changer
       Drupal?
“The complexity of the custom code that’s
  used and the non-standard architecture
combines to create a barrier to entry
    for developers new to Drupal
    (both experienced and novice
          developers alike).”
              buytaert.net
Stop NIH / RTW



• Not Invented Here
• Reinventing The Wheel
ClassLoader



• Le composant ClassLoader charge vos
  classes automatiquement si elles
  suivent une certaine convention
HttpFoundation

• Le composant HTTPFoundation
  fournit une couche remplie de
  fonctionnalités et complètement
  orientée objet pour les messages HTTP
• Il remplace les variables globales
  natives à PHP afin d’écrire un code
  meilleur, plus sûr et facilement
  testable.
HttpFoundation

• Le composant HTTPFoundation
  fournit une couche remplie de
  fonctionnalités et complètement
  orientée objet pour les messages HTTP
• Il remplace les variables globales                       Response
  natives à PHP afin d’écrire un code                      HTTP/1.1 200 OK
                                                          Date: Wed, 15 Oct 2005 07:07:07 GMT
                                                          Content-Length: 14


  meilleur, plus sûr et facilement
                                                          Content-Type: text/html

                                                          Hello World!




  testable.             use SymfonyComponentHttpFoundationResponse;

                        $response = new Response('Not Found', 404,
                            array('Content-Type' => 'text/plain'));
                        $response = new Response();
                        $response->setContent('Hello World');
Routing



• Le composant Routing découple
  l’apparence des url du code qui les
  traite.
Routing



• Le composant Routing découple
  l’apparence des url du code qui les
  traite.
                           use SymfonyComponentRoutingRequestContext;
                           use SymfonyComponentRoutingMatcherUrlMatcher;

                           $matcher = new UrlMatcher($routes, new RequestContext());

                           $attributes = $matcher->match('/node/12');
                           $attributes = $matcher->match($request->getPathInfo());

                           print_r($attributes);

                           array(
                               '_route'      => 'node',
                               'id'          => 12,
                               '_controller' => 'SomeClass::someMethod',
                           );
EventDispatcher



• Le composant EventDispatcher est
  une version allégée du pattern
  «Observer» .
HttpKernel

             Sub-Request
                                                                                  expection

                                      “sub-response” content
                                                                                        exception


                          resolve                          resolve      Call
Request   request                         controller                 Controller         response      Response
                         controller                      arguments




                                                                       view
                                                                                                      terminate



             response?



                                                                                          Drupal 8 meets Symfony
• Le HttpKernel par défaut fait en sorte
  que Drupal soit intéropérable avec
  n’importe quelle autre application
  utilisant cette même interface
• Le DrupalHttpKernel étend le
  HttpKernel par défaut

Présentation symfony drupal

  • 1.
  • 2.
  • 3.
  • 4.
    Symfony2, c’est quoi? Ensemblede composants : • autonomes
  • 5.
    Symfony2, c’est quoi? Ensemblede composants : • autonomes • découplés
  • 6.
    Symfony2, c’est quoi? Ensemblede composants : • autonomes • découplés • cohésifs
  • 7.
    Symfony2, c’est quoi? Ensemblede composants : • autonomes • découplés • cohésifs
  • 8.
  • 9.
    MVC ? • Commentfonctionne le WEB ?
  • 10.
    MVC ? • Commentfonctionne le WEB ? • Le WEB c’est pas du MVC !
  • 11.
    MVC ? • Commentfonctionne le WEB ? • Le WEB c’est pas du MVC ! • C’est quoi alors ?
  • 12.
    Framework HTTP • RFC2616 • HttpBis • Request / Response ! • Patterns OO établis • Architecture solide • Awesome community
  • 13.
    Pourquoi changer Drupal? “The complexity of the custom code that’s used and the non-standard architecture combines to create a barrier to entry for developers new to Drupal (both experienced and novice developers alike).” buytaert.net
  • 14.
    Stop NIH /RTW • Not Invented Here • Reinventing The Wheel
  • 15.
    ClassLoader • Le composantClassLoader charge vos classes automatiquement si elles suivent une certaine convention
  • 16.
    HttpFoundation • Le composantHTTPFoundation fournit une couche remplie de fonctionnalités et complètement orientée objet pour les messages HTTP • Il remplace les variables globales natives à PHP afin d’écrire un code meilleur, plus sûr et facilement testable.
  • 17.
    HttpFoundation • Le composantHTTPFoundation fournit une couche remplie de fonctionnalités et complètement orientée objet pour les messages HTTP • Il remplace les variables globales Response natives à PHP afin d’écrire un code HTTP/1.1 200 OK Date: Wed, 15 Oct 2005 07:07:07 GMT Content-Length: 14 meilleur, plus sûr et facilement Content-Type: text/html Hello World! testable. use SymfonyComponentHttpFoundationResponse; $response = new Response('Not Found', 404, array('Content-Type' => 'text/plain')); $response = new Response(); $response->setContent('Hello World');
  • 18.
    Routing • Le composantRouting découple l’apparence des url du code qui les traite.
  • 19.
    Routing • Le composantRouting découple l’apparence des url du code qui les traite. use SymfonyComponentRoutingRequestContext; use SymfonyComponentRoutingMatcherUrlMatcher; $matcher = new UrlMatcher($routes, new RequestContext()); $attributes = $matcher->match('/node/12'); $attributes = $matcher->match($request->getPathInfo()); print_r($attributes); array( '_route' => 'node', 'id' => 12, '_controller' => 'SomeClass::someMethod', );
  • 20.
    EventDispatcher • Le composantEventDispatcher est une version allégée du pattern «Observer» .
  • 21.
    HttpKernel Sub-Request expection “sub-response” content exception resolve resolve Call Request request controller Controller response Response controller arguments view terminate response? Drupal 8 meets Symfony
  • 22.
    • Le HttpKernelpar défaut fait en sorte que Drupal soit intéropérable avec n’importe quelle autre application utilisant cette même interface • Le DrupalHttpKernel étend le HttpKernel par défaut

Notes de l'éditeur