65
Noël GUILBERT – Présentation Symfony EPITA 22/04/2010

Présentation symfony epita

Embed Size (px)

DESCRIPTION

Présentation de symfony à l'EPITA le 22 avril 2010

Citation preview

Page 1: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

22/04/2010

Page 2: Présentation symfony epita

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

Page 3: Présentation symfony epita

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

Page 4: Présentation symfony epita

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

Page 5: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Symfony, ce n’est pas que du code

Des ouvrages dans différents pays:

22/04/2010

Page 6: Présentation symfony epita

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

Page 7: Présentation symfony epita

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

Page 8: Présentation symfony epita

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

Page 9: Présentation symfony epita

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

Page 10: Présentation symfony epita

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

Page 11: Présentation symfony epita

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

Page 12: Présentation symfony epita

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

Page 13: Présentation symfony epita

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

Page 14: Présentation symfony epita

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

Page 15: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

CLI$> php symfony

22/04/2010

Page 16: Présentation symfony epita

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

Page 17: Présentation symfony epita

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

Page 18: Présentation symfony epita

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

Page 19: Présentation symfony epita

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

Page 20: Présentation symfony epita

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

Page 21: Présentation symfony epita

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

Page 22: Présentation symfony epita

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

Page 23: Présentation symfony epita

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

Page 24: Présentation symfony epita

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

Page 25: Présentation symfony epita

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

Page 26: Présentation symfony epita

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

);

Page 27: Présentation symfony epita

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;

Page 28: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Intégré à la barre de debug

22/04/2010

Page 29: Présentation symfony epita

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

Page 30: Présentation symfony epita

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

Page 31: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Support avancé des formulaires

22/04/2010

Page 32: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Support avancé des formulaires

22/04/2010

Page 33: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Support avancé des formulaires

22/04/2010

Gestion des erreurs :

Page 34: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Support avancé des formulaires

22/04/2010

Intégré à la barre de debug:

Page 35: Présentation symfony epita

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

Page 36: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Emails avec SwiftMailer

22/04/2010

Envoyer un email

Page 37: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Emails avec SwiftMailer

22/04/2010

Tester l’envoi d’un email

Page 38: Présentation symfony epita

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

Page 39: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Emails avec SwiftMailer

22/04/2010

L’envoi des emails est intégré à la barre de debug

Page 40: Présentation symfony epita

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

Page 41: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Générateur de Back-Office

22/04/2010

Page 42: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

22/04/2010

Démonstration

Page 43: Présentation symfony epita

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

Page 44: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Demo terminée!

22/04/2010

Page 45: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Symfony : que nous réserve l’avenir ?

22/04/2010

Page 46: Présentation symfony epita

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

Page 47: Présentation symfony epita

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

Page 48: Présentation symfony epita

PHP 5.3

Namespaces

Closures / Lambda functions

Late state binding

Noël GUILBERT – Présentation Symfony EPITA

22/04/2010

Page 49: Présentation symfony epita

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

Page 50: 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

Page 51: 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/

Page 52: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Symfony Components

22/04/2010

BrowserKit

Console

CssSelector

DependencyInjection

DomCrawler

EventDispatcher

Finder

OutputEscaper

Process

RequestHandler

Templating

Yaml

Page 53: Présentation symfony epita

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

Page 54: 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

Page 55: 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

Page 56: Présentation symfony epita

Conteneur d’Injection de dépendance

22/04/2010Noël GUILBERT – Présentation Symfony EPITA

Page 57: 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

Page 58: Présentation symfony epita

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()

Page 59: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Request Handler

22/04/2010

Page 60: Présentation symfony epita

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

Page 61: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Les bundles

22/04/2010

Les bundles sont configuré dans le kernel de l’application

Page 62: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Bundles

22/04/2010

Springbok : ticketing system http://github.com/naneau/springbok/

Page 63: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Bundles

22/04/2010

Shopping cart http://github.com/noelguilbert/symfony-demo

Page 64: Présentation symfony epita

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]

Page 65: Présentation symfony epita

Noël GUILBERT – Présentation Symfony EPITA

Questions ?

Noël GUILBERThttp://www.noelguilbert.com/

@noelguilbert

22/04/2010