Upload
noel-guilbert
View
4.794
Download
0
Embed Size (px)
DESCRIPTION
Présentation de symfony à l'EPITA le 22 avril 2010
Citation preview
Noël GUILBERT – Présentation Symfony EPITA
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Symfony, qu’est-ce que c’est ?
Un framework PHP 5 Open-Source
Issu de l’expérience de Sensio Labs dans le développement d’application web
Ensemble d’outils conçus pour faciliter les développements et éviter les tâches répétitives
Destiné aux professionnels
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Sensio Labs
Web agency
70 personnes dédiées au développementWeb
Spécialistes de l’Open-Source
22/04/2010
WebmarketingInternet
Technologies
SensioWeb Agency
Creator of thesymfony
framework
Noël GUILBERT – Présentation Symfony EPITA
Symfony, ce n’est pas que du code
Une documentation Open-source :
Plusieurs livres officiels :
Practical Symfony (350 pages)
The Reference guide (150 pages)
More with Symfony
(320 pages, disponibles en 5 langues)
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Symfony, ce n’est pas que du code
Des ouvrages dans différents pays:
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Symfony, ce n’est pas que du code
Différents évènements et conférences : Symfony camp, Symfony day, Symfony Live,
sprints, bug hunt days, …
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Une version « entreprise »:
Version 1.4 : supportée pendant 3 ans (jusqu’à fin 2012)
Environ une release par mois: Correction de bugs Pas de nouvelle fonctionnalité La mise à jour est simple et sans danger La migration depuis une version antérieure est simple
Support commercial Documentation stable et maintenue Formations Conseil
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Objectifs Développer plus vite, et surtout mieux
Promouvoir l’utilisation de bonnes pratiques de développement
Réaliser des applications évolutives et maintenables
Se concentrer uniquement sur la logique métier
Ne pas réinventer la roue
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Développer plus vite Ecrire moins de code
Plus de temps pour la logique métier, les cas limites, …
Moins de code
Moins de complexité
Moins de bugs
Plus de productivité
Plus de temps
Moins de code
Moins de complexité
Moins de bugs
Plus de productivité
Plus de temps
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Fonctionnalités Architecture MVC Internationalisation / Localisation ORM Support avancé des formulaires Sécurité Gestion des environnements Outils de développement et de debug Configurable et extensible Cache Générateur d’interface d’administration Tests unitaires et fonctionnels URLs « propres » CLI Emails
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Architecture MVC 3 couches logiques :
Model: logique métier View : présentation Controller: logique
applicative
Avantages : Meilleure
encapsulation Code réutilisable Testable unitairement Robuste
Response
client
internet
server
controller
view
model
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Url propres Symfony gère les URLs propres
Pourquoi ? SEO « user-friendly » Masque l’implémentation technique
/blog.php?section=symfony&article_id=18475/blog.php?section=symfony&article_id=18475
/blog/2010-04-22/symfony-a-l-epita/blog/2010-04-22/symfony-a-l-epita
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Outils pour le développeur Symfony est fourni avec des outils de débogage
Pourquoi ? Faciliter le débogage Améliorer la productivité du développeur
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
CLI Symfony possède un certain nombre d’outils
en ligne de commande pour faciliter le développement:
Génération de code Exécution des tests fonctionnels et unitaires Génération de la base de données Installation de plugins Configurations diverses Déploiements Etc…
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
CLI$> php symfony
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Configurable et extensible
Symfony est configurable et facilement extensible
Système de plugins
Pourquoi ? Le web évolue vite Chaque projet a des besoins spécifiques Un framework ne peut, et ne doit pas tout faire Faciliter les contributions externes
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Sécurité
Symfony est protégé par défaut contre les principales vulnérabilités :
Injection SQL
XSS (Cross-site Scripting)
CSRF (Cross Site Request Forgeries)
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Environnements
Symfony dispose d’une notion d’environnements :
Développement
Test
Production
Pourquoi ? Le développeur doit pouvoir diagnostiquer les problèmes
rapidement: barre de debug, erreurs, etc…
Le site en production doit avoir le cache activé, masquer les informations sensibles en cas de problème, …
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Tests fonctionnels et unitaires
Symfony dispose d’un framework de test unitaire spécialement adapté : Lime
Symfony automatise les tests des applications par la simulation d’un navigateur
Pourquoi ? Les tests manuels ne sont pas fiables et reproductibles Une application testée contient moins de bugs
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Cache
symfony gère de façon très fine le cache des applications
Plusieurs mécanismes de cache sont supportés :fichier, APC, memcache, …
Permet d’améliorer la scalabilité des applications rapidement
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
I18N et L10N
Symfony possède nativement un support de l’I18N et de la L10N
Facilite l’internationalisation des applications
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Object Relational Mapping
Réalise le mapping entre une base de donnée relationnelle et un modèle orienté objet
Couche d’abstraction de base de données
Manipulation de base de données à travers une interface orientée objet
Deux ORMs sont disponibles : Doctrine et Propel
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Abstraction de base de données
Chaque SGBD a ses spécificités
Permet de basculer d’un SGBD à un autre facilement
Vous n’avez plus de SQL à écrire !
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Doctrine et Propel
Bien intégrés à Symfony : Configuration en YAML Ligne de commandes I18n Admin-generator Documentation Tutoriels
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Décrire la structure de votre base de données
22/04/2010
ShopProduct:
actAs:
Timestampable: ~
Sluggable:
fields: [reference, name]
columns:
reference: { type: string(15), notnull: true, unique: true }
name: { type: string(100), notnull: true }
description: { type: clob, notnull: true }
stock: { type: integer(4), notnull: true, default: 0 }
price: { type: float, notnull: true }
Nom de la classe
Comportements automatiques
Définition des colonnes
Noël GUILBERT – Présentation Symfony EPITA
Du schéma à la base de données
22/04/2010
ShopProduct:
columns:
name:
type: string(100),
notnull: true
CREATE TABLE shop_product (
id integer NOT NULL PRIMARY KEY
AUTO_INCREMENT,
name varchar(100) NOT NULL
);
Noël GUILBERT – Présentation Symfony EPITA
Des objets à la base de données
22/04/2010
INSERT INTO shop_product (‘reference’,
‘name’, ‘price’) VALUE (‘AZERTY’, ‘Blue
couch’, 299.9);
UPDATE shop_product set name = ‘Red couch’
WHERE id = 1;
Noël GUILBERT – Présentation Symfony EPITA
Intégré à la barre de debug
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Symfony a une gestion des formulaires très avancée et très modulaire
Toutes les applications ont des formulaires
La définition des formulaires est longue et fastidieuse
La validation des données « à la main » est fastidieuse
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Les support des formulaires permettent d’encapsuler leur cycle de vie complet :
Champs de saisies
Validation
Processus métier : sauvegarde, traitement des données, etc…
Intégration avec les ORMs pour la manipulation des données
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Gestion des erreurs :
Noël GUILBERT – Présentation Symfony EPITA
Support avancé des formulaires
22/04/2010
Intégré à la barre de debug:
Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer
22/04/2010
Symfony est fourni avec une des meilleures solutions en PHP d’emailing : SwiftMailer
Cette solution est complètement intégrée
avec symfony :
Environnements
Files d’attente
Tests fonctionnels
Debuggage
Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer
22/04/2010
Envoyer un email
Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer
22/04/2010
Tester l’envoi d’un email
Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer
22/04/2010
Configuration
Stratégies d’envoi
Désactivée par défaut dans les environnements de test et de
développement
Possibilité de rediriger tous les mails vers une adresse unique
Pratique pour tester l’envoi des emails
En temps réel
En file d’attente
Noël GUILBERT – Présentation Symfony EPITA
Emails avec SwiftMailer
22/04/2010
L’envoi des emails est intégré à la barre de debug
Noël GUILBERT – Présentation Symfony EPITA
Générateur de Back-Office
Génération automatique d’interfaces d’administration : Listes Pagination Tris CRUD Filtres Validation
Pourquoi ? Tous les sites ont un back-office Fastidieux à développer et à tester Aucune valeur ajoutée pour le développeur
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Générateur de Back-Office
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
22/04/2010
Démonstration
Noël GUILBERT – Présentation Symfony EPITA
Réalisation d’un back office de gestion des étudiants
Lister les étudiants, 10 par page afficher la photo, nom, prénom et promo de
chaque étudiant Trier par défaut les étudiants par ordre
alphabétique Moteur de recherche multi-critères Formulaires de création et d’édition Upload de photo Validation des données saisies Suppression d’un étudiant
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Demo terminée!
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Symfony : que nous réserve l’avenir ?
22/04/2010
22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Une évolution majeure de symfony 1.x : Full stack Configurable Extensible Testable
Une nouvelle architecture: Utilisation des nouveautés de PHP 5.3
Symfony 2 : ne pas réinventer la roue
Réutilisation des meilleurs composants du monde Open-Source :
Doctrine 2
PHPUnit
SwiftMailer
Zend_Log
Noël GUILBERT – Présentation Symfony EPITA
22/04/2010
PHP 5.3
Namespaces
Closures / Lambda functions
Late state binding
Noël GUILBERT – Présentation Symfony EPITA
22/04/2010
Symfony 2 : Quelles nouveautés ?
22/04/2010
Meilleures performances
Composants autonomes
Injection de dépendance
Request Handler
Bundles
Noël GUILBERT – Présentation Symfony EPITA
Symfony 2 : Plus rapide ?
22/04/2010
Symfony 2 est 2,5x plus rapide que symfony 1.4.x
… et environ 60x plus rapide que Flow 3 (en version alpha)
http://symfony-reloaded.org/fast
Noël GUILBERT – Présentation Symfony EPITA
Noël GUILBERT – Présentation Symfony EPITA
Symfony Components
22/04/2010
Librairies autonomes
Chaque composant à un périmètre et une documentation spécifique
http://components.symfony-project.org/
Noël GUILBERT – Présentation Symfony EPITA
Symfony Components
22/04/2010
BrowserKit
Console
CssSelector
DependencyInjection
DomCrawler
EventDispatcher
Finder
OutputEscaper
Process
RequestHandler
Templating
Yaml
Injection de dépendance
22/04/2010
Permet de gérer les dépendances entre les classes de votre projet
Inspiré par le framework Java Spring
Documentation : http://components.symfony-project.org/dependency-injection/
Noël GUILBERT – Présentation Symfony EPITA
Injection de dépendance
22/04/2010
<?php
class User{ protected $storage;
public function __construct(Storage $storage) { $this->storage = $storage; }}
Noël GUILBERT – Présentation Symfony EPITA
Conteneur d’Injection de dépendance
22/04/2010
Une méthode pour organiser les dépendances
Chaque classe est un service, que l’on peut définir au format YAML :
Noël GUILBERT – Présentation Symfony EPITA
services: user: class: User arguments: [@user.storage]
user.storage: class: Storage
Conteneur d’Injection de dépendance
22/04/2010Noël GUILBERT – Présentation Symfony EPITA
Noël GUILBERT – Présentation Symfony EPITA
Request Handler
22/04/2010
Micro-kernel très rapide pour le développement de framework d’application web
Noël GUILBERT – Présentation Symfony EPITA
Request Handler
22/04/2010
A la base de l’implémentation des contrôleurs dans Symfony 2
Concept très simple: Le point d’entrée est une requête Le point de sortie est une réponse
La requête peut être ce que vous voulez L’objet réponse doit implémenter une
méthode send()
Noël GUILBERT – Présentation Symfony EPITA
Request Handler
22/04/2010
Noël GUILBERT – Présentation Symfony EPITA
Les bundles
22/04/2010
Les bundles sont l’équivalent des plugins dans symfony 1.x
Tout est bundle: Symfony est un bundle Le code de votre application sera dans un bundle
Une application est un ensemble de bundles
Noël GUILBERT – Présentation Symfony EPITA
Les bundles
22/04/2010
Les bundles sont configuré dans le kernel de l’application
Noël GUILBERT – Présentation Symfony EPITA
Bundles
22/04/2010
Springbok : ticketing system http://github.com/naneau/springbok/
Noël GUILBERT – Présentation Symfony EPITA
Bundles
22/04/2010
Shopping cart http://github.com/noelguilbert/symfony-demo
Noël GUILBERT – Présentation Symfony EPITA
Sensio Labs Recrute !
22/04/2010
Chefs de projets web Développeurs
Stages CDI
Envoyez votre CV à [email protected]
Noël GUILBERT – Présentation Symfony EPITA
Questions ?
Noël GUILBERThttp://www.noelguilbert.com/
@noelguilbert
22/04/2010