40
Confoo 2011 Saad Tazi

retour sur confoo2011 et Symfony2

Embed Size (px)

DESCRIPTION

Présentation interne sur Symfony2, plus notes sur le conférence montréalaise Confoo 2011

Citation preview

Page 1: retour sur confoo2011 et Symfony2

Confoo 2011

Saad Tazi

Page 2: retour sur confoo2011 et Symfony2

Au programme…

• Symfony2• Caching, ESI• Autres informations Confoo

• Des questions? Quand vous voulez!

Page 3: retour sur confoo2011 et Symfony2

Introduction

• “Un autre framework MVC PHP (encore??)”• Bati à partir de composants réutilisables

(Yaml, Dependency Injection Container, Twig…)

• Full-stack framework (pas micro – voir silex)

Page 4: retour sur confoo2011 et Symfony2
Page 5: retour sur confoo2011 et Symfony2

Différence avec symfony 1• Entièrement réécrit• Beaucoup d’apprentissage avec symfony 1 => meilleure

pratique dans Symfony 2• Pas de séparation entre plusieurs apps

– Supprime les problèmes de routing entre applications– mais en bundle si nécessaire

• Caching HTTP (on va en parler juste après…)• Utilisation des namespace php 5.3• Mon “feeling”: courbe d’apprentissage plus importante,

moins de “magie”, beaucoup plus de Design Patterns appliqués (DIC, decoupling…)

Page 6: retour sur confoo2011 et Symfony2

Introduction

• http://symfony.com • Qui a travaillé avec symfony (1)? Un autre

framework PHP?

Page 7: retour sur confoo2011 et Symfony2

Une image vaut 1000 mots…

Structure de Symfony (code)

Page 8: retour sur confoo2011 et Symfony2

Structure

Page 9: retour sur confoo2011 et Symfony2

Structure

• Est-ce que j’ai parlé de:– Config– Routing– Vendors

• Swiftmailer• Doctrine 2• Monolog (et non Zend)

Page 10: retour sur confoo2011 et Symfony2

De la requête à la réponse

1. Une requête est reçue par le front controller de Symfony

2. Le routing détermine quelle action est appelée

3. L’action est exécutée4. L’action retourne une réponse• En un mot, Symfony est en charge de convertir

une requête en réponse.

Page 11: retour sur confoo2011 et Symfony2

Front Controller

•Très simple•Toute requête passe par le front controller

Page 12: retour sur confoo2011 et Symfony2

routing

1. Une requête est reçue par le front controller de Symfony

2. Le routing détermine quelle action est appelée

3. L’action est exécutée4. L’action retourne une réponse• En un mot, Symfony est en charge de convertir

une requête en réponse.

Page 13: retour sur confoo2011 et Symfony2

Routing (2)

• Dans app/config/routing.yml:

• Dans DemoController.php:

Page 14: retour sur confoo2011 et Symfony2

Routing (3)

• Diffrérentes approches possibles (combinées)• Yaml• Php• Annotation• Xml

• Avantage par rapport à Symfony 1• Plus flexible• Inclusion de règles externes (Bundles… slide

suivantes)

Page 15: retour sur confoo2011 et Symfony2

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

Page 16: retour sur confoo2011 et Symfony2

Action

1. Une requête est reçue par le front controller de Symfony

2. Le routing détermine quelle action est appelée

3. L’action est exécutée4. L’action retourne une réponse• En un mot, Symfony est en charge de convertir

une requête en réponse.

Page 17: retour sur confoo2011 et Symfony2

Action (2)

Ou (plus “verbose”):return $this->render(’EcmaBundle:Demo:hello.twig',

array('name' => $name));

Le C du MVC

Page 18: retour sur confoo2011 et Symfony2

Twig

• Le V du MVC

• Template engine• Inspiré de Jinja, template engine Python• Rapide, car compilé en PHP• Supporte l’héritage• Pas obligatoire avec Symfony 2

Page 19: retour sur confoo2011 et Symfony2

Twig (2)

(asset, block title (défaut), block content, extends)

Page 20: retour sur confoo2011 et Symfony2

D’autres fonctionnalités…

Page 21: retour sur confoo2011 et Symfony2

Web Debug Toolbar

• Similaire à la debug toolbar de symfony 1• Activable par environnement (dev, prod…)

Page 22: retour sur confoo2011 et Symfony2

Profiler

Page 23: retour sur confoo2011 et Symfony2

Console

Page 24: retour sur confoo2011 et Symfony2

Doctrine 2• Le M du MVC (“enfin!”)

• ORM / ODM au dessus de PDO• Data Mapper Design Pattern au lieu de Active Record

– Pas nécessaire que les Classes Modèles héritent d’une classe parent

– Une classe qui s’occupe de faire les actions DB (Mapper - classe générée automatiquement)

• Support de MongoDB (ODM) et CouchDB et…

Page 25: retour sur confoo2011 et Symfony2

Doctrine 2 (2)

Annotation, XML, YAML pour définir les Entités (= les classes Modèles)

Page 26: retour sur confoo2011 et Symfony2

Tests

• PHPUnit + classe WebTestCase + 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

Page 27: retour sur confoo2011 et Symfony2

Tests (2)

Page 28: retour sur confoo2011 et Symfony2

Cache

GET (Etag, ...)

OUI

Cache existe? valide?

NON

Page 29: retour sur confoo2011 et Symfony2

• But: ne pas “frapper” le serveur Web à chaque appel• HTTP RFC 2616 Compliant• Expiration

– Expires=Date• Surtout pour ce qui est statique (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)

Page 30: retour sur confoo2011 et Symfony2

Cache (3)

Front Controller:

Sans cache

Avec cache

Page 31: retour sur confoo2011 et Symfony2

• Dans Symfony2– La classe AppCache peut avoir les headers par défaut– Chaque action peut (re)définir les “headers de cache”– On peut “wrapper” le framework par un système de cache

PHP (pour tester)– On peut utiliser Varnish ou Akamai ou 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)

Page 32: retour sur confoo2011 et Symfony2

• ESI: Edge Side Include

• Le reverse proxy fait un appel si nécessaire• Avec Symfony2: un helper:

Cache (5)

Page 33: retour sur confoo2011 et Symfony2

• 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-release depuis quelques temps…(j’ai

omis le Form framework pour une raison…)• (les dernières nouvelles…)

En résumé

Page 34: retour sur confoo2011 et Symfony2

Et le reste de confoo?

Page 35: retour sur confoo2011 et Symfony2

HTML5

• Très présent, même si on utilise HTML5 pour plus…• Librairie Javascript, SVG, …

• Nombreuses conférences, de Mozilla, Microsoft…• Quoi faire avec les anciens browsers:

• Polyfills https://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…

Page 36: retour sur confoo2011 et Symfony2

Server-Side Javascript

• Nodejs– Javascript v8 de google– Très rapide

• v8 en moyenne 8x plus rapide que PHP(de http://shootout.alioth.debian.org/)

– Non bloquant• Similaire à:

$(selector).click(function() {…});• Mais pour tout: requête DB, routing…

– Pas encore complétement stable (0.4.6) ni “scalable”– Gros buzz– Express, npm, socket.io

Page 37: retour sur confoo2011 et Symfony2

Clean PHP

• Du créateur de PHPUnit• Des principes de base que les développeurs ont tendance à oublier• KISS – Keep it simple stupid• beware of optimizations

• optimiser seulement si né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écrire une classe!• Active record vs. Data Mapper

• the boy scout rule• Laisser le code plus “propre” qu’avant de l’avoir modifié

• Reviews (peer), Automated testing, refactoring, tell don’t ask…

Page 38: retour sur confoo2011 et Symfony2

Hidden Features of PHP

• Spl: SplIterator, SplQueue (RabbitMQ)• StatGrab: CPU, RAM, Disk stats, …• igbinary (sur github)

– Plus rapide et plus efficace que le serialize• Session plus aléatoire:

– session.entropy_file: / dev/urandomsession.entropy_length = 32

Page 39: retour sur confoo2011 et Symfony2

Autres notes

• “Varnish in action”• XHProf:

– de facebook (opensource)– Profiler php sur le serveur de production

• NoSQL– MongoDB, CouchDB, Cassandra

• Hiphop (facebook)• Jenkins, xdebug (cachegrind, profiling), Alloy

framework, Sinatra…

Page 40: retour sur confoo2011 et Symfony2

Merci!

• http://www.evernote.com/pub/saadtazi/confoo

• Questions?