5. Différence avec symfony 1 Entièrementréécrit Beaucoup d’apprentissage avec symfony 1 => meilleurepratiquedansSymfony 2 Pas de séparation entre plusieursapps Supprime les problèmes de routing entre applications maisen bundle sinécessaire Caching HTTP (on va en parlerjuste après…) Utilisation des namespace php 5.3 Mon “feeling”: courbed’apprentissage plus importante, moins de “magie”, beaucoup plus de Design Patterns appliqués (DIC, decoupling…)
10. De la requêteà la réponse Unerequêteestreçue par le front controller de Symfony Le routing déterminequelle action estappelée L’actionestexécutée L’actionretourneuneréponse En un mot, Symfonyest en charge de convertirunerequête en réponse.
11.
12.
13.
14. Bundles Un bundle est un répertoire avec une structure prédéfinie, qui contient des classes, des controlleurs, des templates et des ressources (images, css…), des règles de routing Remplace les plugins… mais en plus générique Configuration, routing par bundle possible
15. Action Unerequêteestreçue par le front controller de Symfony Le routing déterminequelle action estappelée L’actionestexécutée L’actionretourneuneréponse En un mot, Symfonyest en charge de convertirunerequête en réponse.
16. Action (2) Le C du MVC Ou (plus “verbose”): return $this->render(’EcmaBundle:Demo:hello.twig', array('name' => $name));
17. Twig Le V du MVC Template engine Inspiré de Jinja, template engine Python Rapide, car compilé en PHP Supportel’héritage Pas obligatoire avec Symfony 2
23. Doctrine 2 Le M du MVC (“enfin!”) ORM / ODM au dessus de PDO Data Mapper Design Pattern au lieu de Active Record Pas nécessaireque les Classes Modèleshéritentd’uneclasse parent Uneclasse qui s’occupe de faire les actions DB (Mapper - classegénéréeautomatiquement) Support de MongoDB (ODM) et CouchDB et…
24. Doctrine 2 (2) Annotation, XML, YAML pour définir les Entités (= les classes Modèles)
25. Tests PHPUnit +classeWebTestCase + le Crawler Component Permet de: simuler des requêtes HTTP, Faire des “back”, Soumettre des formulaires… http://symfony.com/doc/2.0/book/testing.html#the-test-client
28. But: ne pas “frapper” le serveur Web àchaqueappel HTTP RFC 2616 Compliant Expiration Expires=Date Surtout pour ce qui eststatique (synchronisation) Cache-control: Maxage=20, s-maxage=20 (seconds) Validation Etag / if none match Last-modified / if modified since Inséré par le cache (retourne un 304 not modified) Cache (2)
30. DansSymfony2 La classeAppCachepeutavoir les headers par défaut Chaque action peut (re)définirles “headers de cache” On peut “wrapper” le framework par un système de cache PHP (pour tester) On peututiliser Varnish ouAkamaiou NGINX comme reverse Proxy (ou Cache Proxy) en avant du serveur Web Mais comment mettre en cache le “welcome User 1” dans le header par exemple?... Cache (4)
31. ESI: Edge Side Include Le reverse proxy fait un appel si nécessaire Avec Symfony2: un helper: Cache (5)
32. Framework moderne, flexible, puissant dynamise la communauté PHP Doctine 2 Symfony Component Dependency Injection Twig Monolog Silex (à la Sinatra ou nodejs…) http://groups.google.com/group/php-standards/web/psr-0-final-proposal Documentation: bonne, mais manque un jobeet Stabilité: en pre-releasedepuis quelques temps…(j’ai omis le Formframework pour une raison…) (les dernières nouvelles…) En résumé
34. HTML5 Trèsprésent, mêmesi on utilise HTML5 pour plus… LibrairieJavascript, SVG, … Nombreusesconférences, de Mozilla, Microsoft… Quoi faire avec les anciens browsers: Polyfillshttps://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills Quelséléments HTML5 sont “production ready” Video http://craftymind.com/factory/html5video/CanvasVideo.html localStorage WebSocket (lien avec Nodejs plus loin ;-)) File API SVG, Canvas… Pas prêt EmbedDB Drag & Drop…
35. Server-Side Javascript Nodejs Javascript v8 de google Trèsrapide v8 en moyenne 8x plus rapidequePHP (de http://shootout.alioth.debian.org/) Non bloquant Similaireà: $(selector).click(function() {…}); Mais pour tout: requête DB, routing… Pas encorecomplétement stable (0.4.6) ni “scalable” Gros buzz Express, npm, socket.io
36. Clean PHP Du créateur de PHPUnit Des principes de base que les développeursonttendanceàoublier KISS – Keep it simple stupid beware of optimizations optimiserseulementsinécessaire, après benchmark DRY – don’t repeat yourself principle of least astonishment Exemple: pas de getter qui change l’état! Separation of concerns Si on n’utilise pas de “ET” pour décrireuneclasse! Active record vs. Data Mapper the boy scout rule Laisser le code plus “propre” qu’avant de l’avoirmodifié Reviews (peer), Automated testing, refactoring, tell don’t ask…
37. Hidden Features of PHP Spl:SplIterator,SplQueue(RabbitMQ) StatGrab: CPU, RAM, Disk stats, … igbinary (surgithub) Plus rapide et plus efficaceque le serialize Session plus aléatoire: session.entropy_file: / dev/urandomsession.entropy_length = 32
38. Autres notes “Varnish in action” XHProf: de facebook (opensource) Profiler phpsur le serveur de production NoSQL MongoDB, CouchDB, Cassandra Hiphop (facebook) Jenkins, xdebug (cachegrind, profiling), Alloy framework, Sinatra…