Symfony2
What is Symfony ?
Symfony is a PHP Web Development Framework.
That doesn’t answer your question?
Ok, let’s try that again.
Symfony is a PHP Framework, a Philosophy, and a Community -
all working together in harmony.
Sylvain RAGOT & Eric PARA
Code d’Armor - 19 novembre 2013
I. Introduction Symfonique
1: Symfony en une phrase ...
2: Qui se cache derrière ?
3: Quoi d’autre en PHP ?
4: Alors pourquoi Symfony ?
5: Qui l’utilise ?
II. En avant la musique !
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
- qui fait du web régulièrement ?
- qui utilise un framework ?
- PHP ?
- Java ?
- autre ?
- qui a déjà entendu parlé de Symfony?
- qui a déjà essayé ?
- qui pratique régulièrement ?
I.0: Petit sondage ...
Quel est votre langage préféré pour le Web en 2013 ?
Sondage developpez.com réalisé sur 457 participants
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Améliorer la productivité des développeurs
Nombreuses fonctionnalités disponibles
Existence d’une communauté
(tutoriaux, cours, forums)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
+ Améliorer la productivité des développeurs
Permettre le travail en équipe
Respect de certains patterns
MVC: Modèle-Vue-Contrôleur
Encourager les bonnes pratiques
Don’t reinvent the wheel
DRY: Don’t Repeat Yourself
DIE: Duplication Is Evil
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
+ Améliorer la productivité des développeurs
+ Permettre le travail en équipe
Garantir la maintenance, la sécurité
et l’évolutivité de l’application
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
+ Améliorer la productivité des développeurs
+ Permettre le travail en équipe
+ Garantir la maintenance, la sécurité
et l’évolutivité de l’application
Courbe d'apprentissage souvent élevée
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
+ Améliorer la productivité des développeurs
+ Permettre le travail en équipe
+ Garantir la maintenance, la sécurité
et l’évolutivité de l’application
- Courbe d'apprentissage élevée !
Moyens et gros projets à plusieurs
sinon CMS (Wordpress, Drupal, …)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Langage de script, interprété côté serveur
Performant: systèmes de caches
Langage peu typé et souple
Facile à apprendre par un débutant
Nombreuses fonctions du langage C
Gratuit, libre, simple d'installation
Multiplate-forme (LAMP, WAMP)
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: PHP6 Unicode
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
Framework de développement Web en PHP
Rasmus Lerdorf, né à Qeqertarsuaq
1994: création, 1995: publication, 1998: reprise
2000: PHP4 réécriture complète => Zend Engine
2004: PHP5 modèle objet => Zend Engine 2
2006: v5.2
2010: v5.3 (namespaces, annotations, archives phar, ...)
2012: v5.4 (traits, serveur web embarqué en CLI, ...)
2013: v5.5 (API de hachage, cache intégré, ...)
I.1: Symfony en une phrase ...
I.2: Qui se cache derrière ?
Web agency Française : Sensio [1998]
Fabien Potencier, lead développeur
Sensio Framework [dès 2000]
Symfony 1.0 [2005] => 1.4 [2010]
Symfony 2.0 [été 2011] => 2.3 [été 2013]
I.2: Qui se cache derrière ?
Web agency Française : Sensio [1998]
Fabien Potencier, lead développeur
Sensio Framework [dès 2000]
Symfony 1.0 [2005] => 1.4 [2010]
Symfony 2.0 [été 2011] => 2.3 [été 2013]
I.2: Qui se cache derrière ?
Web agency Française : Sensio [1998]
Fabien Potencier, lead développeur
Sensio Framework [dès 2000]
Symfony 1.0 [2005] => 1.4 [2010]
Symfony 2.0 [été 2011] => 2.3 [été 2013]
I.2: Qui se cache derrière ?
Web agency Française : Sensio [1998]
Fabien Potencier, lead développeur
Sensio Framework [dès 2000]
Symfony 1.0 [2005] => 1.4 [2010]
Symfony 2.0 [été 2011] => 2.3 [été 2013]
I.2: Qui se cache derrière ?
Aux débuts du web il y eu PHP …
I.3: Quoi d’autre en PHP ?
Aux débuts du web il y eu PHP …
Très simple, mais limité
I.3: Quoi d’autre en PHP ?
I.3: Quoi d’autre en PHP ?
Aux débuts du web il y eu PHP …
Très simple, mais limité
Dispose de l'essentiel pour la plus part
des projets, de plus en plus connu
I.3: Quoi d’autre en PHP ?
Aux débuts du web il y eu PHP …
Très simple, mais limité
Dispose de l'essentiel pour la plus part
des projets, de plus en plus connu
Très complet mais complexe
Grosse communauté
“Symfony is not a framework but a project”
Framework entièrement modulaire
Composants ‘systèmes’ de bases
(routing, http, moteur de rendu, …)
Bundles
découpage de l’application en fonctionnalités
Indépendance et donc partage
I.4: Alors pourquoi Symfony ?
I.4: Alors pourquoi Symfony ?
“Symfony is not a framework but a project”
Framework entièrement modulaire:
Composants ‘systèmes’ natifs
(routing, http, moteur de rendu, …)
Bundles
découpage de l’application en fonctionnalités
Indépendance et donc partage
I.4: Alors pourquoi Symfony ?
“Symfony is not a framework but a project”
Framework entièrement modulaire:
Composants ‘systèmes’ de bases
(routing, http, moteur de rendu, …)
Bundles
découpage de l’application en fonctionnalités
Indépendance et donc partage
I.4: Alors pourquoi Symfony ?
“Symfony is not a framework but a project”
Framework entièrement modulaire:
Composants ‘systèmes’ de bases
(routing, http, moteur de rendu, …)
Bundles
découpage de l’application en fonctionnalités
Indépendance et donc partage
I.4: Alors pourquoi Symfony ?
L'un des plus flexibles et des plus puissants
Gros efforts fait sur les performances
Stabilité mais évolution constante
Grande réputation professionnelle
Existence d’une grosse communauté
Internationale et Française
Distribué sous licence Open Source MIT
I.4: Alors pourquoi Symfony ?
L'un des plus flexibles et des plus puissants
Gros efforts fait sur les performances
Stabilité mais évolution constante
Grande réputation professionnelle
Existence d’une grosse communauté
Internationale et Française
Distribué sous licence Open Source MIT
I.4: Alors pourquoi Symfony ?
L'un des plus flexibles et des plus puissants
Gros efforts fait sur les performances
Stabilité mais évolution constante
Grande réputation professionnelle
Existence d’une grosse communauté
Internationale et Française
Distribué sous licence Open Source MIT
I.4: Alors pourquoi Symfony ?
L'un des plus flexibles et des plus puissants
Gros efforts fait sur les performances
Stabilité mais évolution constante
Grande réputation professionnelle
Existence d’une grosse communauté
Internationale et Française
Distribué sous licence Open Source MIT
I.5: Qui utilise Symfony ?
II. En avant la musique !
1: Téléchargement, Installation, Hello world !
2: Structure d’un projet Symfony2
3: Génération de code (CRUD)
4: Principaux composants
Barre de débug, enrobage des exceptions
Twig (moteur de rendu)
Doctrine (base de données)
Forms
Services et Injection de dépendances
II.1: Installation
Créer un projet symfony2
avec composer
http://getcomposer.org/
https://github.com/composer/composer
C’est quoi ? un fichier .phar
Ça sert à quoi ? gérer les bibliothèques et les dépendances
… et ça marche du tonnerre !
# télécharger composer
$ curl -sS https://getcomposer.org/installer | php
# créer un projer Symfony2
$ php composer.phar create-project symfony/framework-standard-edition ./
<code />
II.2: Structure d’un projet Symfony2
● les bundles
● les environnements
● le format YAML (YAML Ain't Markup Language)
● les namespaces
namespace AcmeDemoBundleController;
● best practices : http://symfony.com/fr/doc/current/cookbook/bundles/best_practices.html
Contrôleurs Ressources Web
Extensions du Conteneur de Services Fichiers de traduction
Listeners d’évènements Templates
Configuration Tests unitaires & fonctionnels
II.3: Génération de code
Ce qu’on va faire :
: en 4 commandes
II.3: Génération de code
Étape 1 : récupérer les informations en base
● structure des tables
● relations
● crée des meta-données au format xml (yml)
$ php app/console
doctrine:mapping:convert
xml
./src/Acme/DemoBundle/Resources/config/doctrine/metadata/orm
--from-database --force
<code />
Étape 2 : créer les Entity (avec le mapping)
Qu’est-ce qu’une entité ?
II.3: Génération de code
$ php app/console doctrine:mapping:import AcmeDemoBundle annotation
<code />
class Article {
private $id;
private $id_auteur;
/**
* @ORMColumn(name="titre", type="string")
*/
private $titre;
…
public function getTitre()
{ … }
public function setTitre()
{ … }
}
Étape 3 : Finalisation
● Générer les accesseurs
● Assurer la cohérence du modèle
attention à cette commande en production !
II.3: Génération de code
$ php app/console doctrine:generate:entities AcmeDemoBundle
<code />
$ php app/console doctrine:schema:update --dump-sql
$ php app/console doctrine:schema:update --force
<code />
Étape 4 : Générer des modules CRUD
● CRUD = Create, Read, Update, Delete
● pratique au début pour jouer avec le code
● on va générer 3 choses :
○ des vues
○ des contrôleurs
○ des formulaires
II.3: Génération de code
$ php app/console doctrine:generate:crud
<code />
II.4.1: Aide au debuggage
Barre de debug
● Timeline
● Requêtes exécutées
● Limite : appels AJAX (possibilité d’accès dynamique la barre)
Enrobage des exceptions
II.4.2: Twig, un moteur de rendu
● plus aucune balise <?php ?> dans les vues
● une syntaxe simple et TRES efficace
● extensible
● héritage de tempates
● composant indépendant de Symfony
● http://twig.sensiolabs.org/
II.4.2: Twig, un moteur de rendu
L’annotation @Route
● Permet de nommer la route
● Indique à la vue quel action utiliser
L’annotation @Method
● Précise le type de requête HTTP (GET, POST)
L’annotation @Template
● Indique au contrôleur quelle vue utiliser
● Peut être omise (Symfony va essayer de deviner)
● Peut indiquer le langage (TWIG ou PHP)
II.4.3: Doctrine = DBAL + ORM
● Plusieurs ORM
● Plusieurs SGBD
○ MySQL, PgSQL, SQLlite (PDO)
○ Oracle (OCI)
● Des annotations pour décrire la structure
● Un langage (Doctrine Query Language)
● Des requêtes “magiques”
● Des accesseurs “intelligents”
Dans une vue, je souhaite afficher une information d’une
table liée (jointure) :
○ L’information est présente dans l’entité : je l’utilise
○ L’information est absente de l’entité : on la récupère
II.4.3: Doctrine = DBAL + ORM
// Contrôleur
$article = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Article ')
->find($id);
$article = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Article ')
->findOneByTitle('Symfony2');
<code />
II.4.4: La gestion des formulaires
● composant indépendant de Symfony
● 2 types de formulaires
○ liés à une entité (persistance du contenu en base)
○ indépendants
● formulaires imbriqués
● protection CSRF (Cross-Site Request Forgery)
● validation
● Extensions et Types personnalisés
● HTML5
II.4.5: Services
& Injections de dépendances
● Tout (ou presque) est un service
● Permet
○ un haut degrés de factorisation
○ une réutilisation du code
○ des tests
● Peut dépendre d’autre(s) service(s)
// Resources/config/services.yml
syl.helper.membres:
class: "SylCadeauxBundleServicesMembresHelper"
arguments: ["@doctrine.orm.entity_manager"]
calls:
- [ injectMailer, [ " @syl.service.mail" ] ]
<code />
En vrac
● Assetic
● I18N & L10N (XLIFF)
● Mailer (Swiftmailer)
● Tests unitaires et fonctionnels
Fin !
Des Questions ?
mais sans tee-shirt cette fois-ci ...

Symfony2 Presentation

  • 1.
    Symfony2 What is Symfony? Symfony is a PHP Web Development Framework. That doesn’t answer your question? Ok, let’s try that again. Symfony is a PHP Framework, a Philosophy, and a Community - all working together in harmony. Sylvain RAGOT & Eric PARA Code d’Armor - 19 novembre 2013
  • 2.
    I. Introduction Symfonique 1:Symfony en une phrase ... 2: Qui se cache derrière ? 3: Quoi d’autre en PHP ? 4: Alors pourquoi Symfony ? 5: Qui l’utilise ? II. En avant la musique !
  • 3.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 4.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 5.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 6.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 7.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 8.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 9.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 10.
    I.0: Petit sondage... - qui fait du web régulièrement ? - qui utilise un framework ? - PHP ? - Java ? - autre ? - qui a déjà entendu parlé de Symfony? - qui a déjà essayé ? - qui pratique régulièrement ?
  • 11.
    I.0: Petit sondage... Quel est votre langage préféré pour le Web en 2013 ? Sondage developpez.com réalisé sur 457 participants
  • 12.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP
  • 13.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Améliorer la productivité des développeurs Nombreuses fonctionnalités disponibles Existence d’une communauté (tutoriaux, cours, forums)
  • 14.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP + Améliorer la productivité des développeurs Permettre le travail en équipe Respect de certains patterns MVC: Modèle-Vue-Contrôleur Encourager les bonnes pratiques Don’t reinvent the wheel DRY: Don’t Repeat Yourself DIE: Duplication Is Evil
  • 15.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP + Améliorer la productivité des développeurs + Permettre le travail en équipe Garantir la maintenance, la sécurité et l’évolutivité de l’application
  • 16.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP + Améliorer la productivité des développeurs + Permettre le travail en équipe + Garantir la maintenance, la sécurité et l’évolutivité de l’application Courbe d'apprentissage souvent élevée
  • 17.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP + Améliorer la productivité des développeurs + Permettre le travail en équipe + Garantir la maintenance, la sécurité et l’évolutivité de l’application - Courbe d'apprentissage élevée ! Moyens et gros projets à plusieurs sinon CMS (Wordpress, Drupal, …)
  • 18.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 19.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 20.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 21.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 22.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 23.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 24.
    I.1: Symfony enune phrase ... Framework de développement Web en PHP Langage de script, interprété côté serveur Performant: systèmes de caches Langage peu typé et souple Facile à apprendre par un débutant Nombreuses fonctions du langage C Gratuit, libre, simple d'installation Multiplate-forme (LAMP, WAMP)
  • 25.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 26.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 27.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 28.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 29.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 30.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: PHP6 Unicode 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 31.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 32.
    Framework de développementWeb en PHP Rasmus Lerdorf, né à Qeqertarsuaq 1994: création, 1995: publication, 1998: reprise 2000: PHP4 réécriture complète => Zend Engine 2004: PHP5 modèle objet => Zend Engine 2 2006: v5.2 2010: v5.3 (namespaces, annotations, archives phar, ...) 2012: v5.4 (traits, serveur web embarqué en CLI, ...) 2013: v5.5 (API de hachage, cache intégré, ...) I.1: Symfony en une phrase ...
  • 33.
    I.2: Qui secache derrière ? Web agency Française : Sensio [1998] Fabien Potencier, lead développeur Sensio Framework [dès 2000] Symfony 1.0 [2005] => 1.4 [2010] Symfony 2.0 [été 2011] => 2.3 [été 2013]
  • 34.
    I.2: Qui secache derrière ? Web agency Française : Sensio [1998] Fabien Potencier, lead développeur Sensio Framework [dès 2000] Symfony 1.0 [2005] => 1.4 [2010] Symfony 2.0 [été 2011] => 2.3 [été 2013]
  • 35.
    I.2: Qui secache derrière ? Web agency Française : Sensio [1998] Fabien Potencier, lead développeur Sensio Framework [dès 2000] Symfony 1.0 [2005] => 1.4 [2010] Symfony 2.0 [été 2011] => 2.3 [été 2013]
  • 36.
    I.2: Qui secache derrière ? Web agency Française : Sensio [1998] Fabien Potencier, lead développeur Sensio Framework [dès 2000] Symfony 1.0 [2005] => 1.4 [2010] Symfony 2.0 [été 2011] => 2.3 [été 2013]
  • 37.
    I.2: Qui secache derrière ?
  • 38.
    Aux débuts duweb il y eu PHP … I.3: Quoi d’autre en PHP ?
  • 39.
    Aux débuts duweb il y eu PHP … Très simple, mais limité I.3: Quoi d’autre en PHP ?
  • 40.
    I.3: Quoi d’autreen PHP ? Aux débuts du web il y eu PHP … Très simple, mais limité Dispose de l'essentiel pour la plus part des projets, de plus en plus connu
  • 41.
    I.3: Quoi d’autreen PHP ? Aux débuts du web il y eu PHP … Très simple, mais limité Dispose de l'essentiel pour la plus part des projets, de plus en plus connu Très complet mais complexe Grosse communauté
  • 42.
    “Symfony is nota framework but a project” Framework entièrement modulaire Composants ‘systèmes’ de bases (routing, http, moteur de rendu, …) Bundles découpage de l’application en fonctionnalités Indépendance et donc partage I.4: Alors pourquoi Symfony ?
  • 43.
    I.4: Alors pourquoiSymfony ? “Symfony is not a framework but a project” Framework entièrement modulaire: Composants ‘systèmes’ natifs (routing, http, moteur de rendu, …) Bundles découpage de l’application en fonctionnalités Indépendance et donc partage
  • 44.
    I.4: Alors pourquoiSymfony ? “Symfony is not a framework but a project” Framework entièrement modulaire: Composants ‘systèmes’ de bases (routing, http, moteur de rendu, …) Bundles découpage de l’application en fonctionnalités Indépendance et donc partage
  • 45.
    I.4: Alors pourquoiSymfony ? “Symfony is not a framework but a project” Framework entièrement modulaire: Composants ‘systèmes’ de bases (routing, http, moteur de rendu, …) Bundles découpage de l’application en fonctionnalités Indépendance et donc partage
  • 46.
    I.4: Alors pourquoiSymfony ? L'un des plus flexibles et des plus puissants Gros efforts fait sur les performances Stabilité mais évolution constante Grande réputation professionnelle Existence d’une grosse communauté Internationale et Française Distribué sous licence Open Source MIT
  • 47.
    I.4: Alors pourquoiSymfony ? L'un des plus flexibles et des plus puissants Gros efforts fait sur les performances Stabilité mais évolution constante Grande réputation professionnelle Existence d’une grosse communauté Internationale et Française Distribué sous licence Open Source MIT
  • 48.
    I.4: Alors pourquoiSymfony ? L'un des plus flexibles et des plus puissants Gros efforts fait sur les performances Stabilité mais évolution constante Grande réputation professionnelle Existence d’une grosse communauté Internationale et Française Distribué sous licence Open Source MIT
  • 49.
    I.4: Alors pourquoiSymfony ? L'un des plus flexibles et des plus puissants Gros efforts fait sur les performances Stabilité mais évolution constante Grande réputation professionnelle Existence d’une grosse communauté Internationale et Française Distribué sous licence Open Source MIT
  • 50.
  • 51.
    II. En avantla musique ! 1: Téléchargement, Installation, Hello world ! 2: Structure d’un projet Symfony2 3: Génération de code (CRUD) 4: Principaux composants Barre de débug, enrobage des exceptions Twig (moteur de rendu) Doctrine (base de données) Forms Services et Injection de dépendances
  • 52.
    II.1: Installation Créer unprojet symfony2 avec composer http://getcomposer.org/ https://github.com/composer/composer C’est quoi ? un fichier .phar Ça sert à quoi ? gérer les bibliothèques et les dépendances … et ça marche du tonnerre ! # télécharger composer $ curl -sS https://getcomposer.org/installer | php # créer un projer Symfony2 $ php composer.phar create-project symfony/framework-standard-edition ./ <code />
  • 53.
    II.2: Structure d’unprojet Symfony2 ● les bundles ● les environnements ● le format YAML (YAML Ain't Markup Language) ● les namespaces namespace AcmeDemoBundleController; ● best practices : http://symfony.com/fr/doc/current/cookbook/bundles/best_practices.html Contrôleurs Ressources Web Extensions du Conteneur de Services Fichiers de traduction Listeners d’évènements Templates Configuration Tests unitaires & fonctionnels
  • 54.
    II.3: Génération decode Ce qu’on va faire : : en 4 commandes
  • 55.
    II.3: Génération decode Étape 1 : récupérer les informations en base ● structure des tables ● relations ● crée des meta-données au format xml (yml) $ php app/console doctrine:mapping:convert xml ./src/Acme/DemoBundle/Resources/config/doctrine/metadata/orm --from-database --force <code />
  • 56.
    Étape 2 :créer les Entity (avec le mapping) Qu’est-ce qu’une entité ? II.3: Génération de code $ php app/console doctrine:mapping:import AcmeDemoBundle annotation <code /> class Article { private $id; private $id_auteur; /** * @ORMColumn(name="titre", type="string") */ private $titre; … public function getTitre() { … } public function setTitre() { … } }
  • 57.
    Étape 3 :Finalisation ● Générer les accesseurs ● Assurer la cohérence du modèle attention à cette commande en production ! II.3: Génération de code $ php app/console doctrine:generate:entities AcmeDemoBundle <code /> $ php app/console doctrine:schema:update --dump-sql $ php app/console doctrine:schema:update --force <code />
  • 58.
    Étape 4 :Générer des modules CRUD ● CRUD = Create, Read, Update, Delete ● pratique au début pour jouer avec le code ● on va générer 3 choses : ○ des vues ○ des contrôleurs ○ des formulaires II.3: Génération de code $ php app/console doctrine:generate:crud <code />
  • 59.
    II.4.1: Aide audebuggage Barre de debug ● Timeline ● Requêtes exécutées ● Limite : appels AJAX (possibilité d’accès dynamique la barre) Enrobage des exceptions
  • 60.
    II.4.2: Twig, unmoteur de rendu ● plus aucune balise <?php ?> dans les vues ● une syntaxe simple et TRES efficace ● extensible ● héritage de tempates ● composant indépendant de Symfony ● http://twig.sensiolabs.org/
  • 61.
    II.4.2: Twig, unmoteur de rendu L’annotation @Route ● Permet de nommer la route ● Indique à la vue quel action utiliser L’annotation @Method ● Précise le type de requête HTTP (GET, POST) L’annotation @Template ● Indique au contrôleur quelle vue utiliser ● Peut être omise (Symfony va essayer de deviner) ● Peut indiquer le langage (TWIG ou PHP)
  • 62.
    II.4.3: Doctrine =DBAL + ORM ● Plusieurs ORM ● Plusieurs SGBD ○ MySQL, PgSQL, SQLlite (PDO) ○ Oracle (OCI) ● Des annotations pour décrire la structure ● Un langage (Doctrine Query Language)
  • 63.
    ● Des requêtes“magiques” ● Des accesseurs “intelligents” Dans une vue, je souhaite afficher une information d’une table liée (jointure) : ○ L’information est présente dans l’entité : je l’utilise ○ L’information est absente de l’entité : on la récupère II.4.3: Doctrine = DBAL + ORM // Contrôleur $article = $this->getDoctrine() ->getRepository('AcmeDemoBundle:Article ') ->find($id); $article = $this->getDoctrine() ->getRepository('AcmeDemoBundle:Article ') ->findOneByTitle('Symfony2'); <code />
  • 64.
    II.4.4: La gestiondes formulaires ● composant indépendant de Symfony ● 2 types de formulaires ○ liés à une entité (persistance du contenu en base) ○ indépendants ● formulaires imbriqués ● protection CSRF (Cross-Site Request Forgery) ● validation ● Extensions et Types personnalisés ● HTML5
  • 65.
    II.4.5: Services & Injectionsde dépendances ● Tout (ou presque) est un service ● Permet ○ un haut degrés de factorisation ○ une réutilisation du code ○ des tests ● Peut dépendre d’autre(s) service(s) // Resources/config/services.yml syl.helper.membres: class: "SylCadeauxBundleServicesMembresHelper" arguments: ["@doctrine.orm.entity_manager"] calls: - [ injectMailer, [ " @syl.service.mail" ] ] <code />
  • 66.
    En vrac ● Assetic ●I18N & L10N (XLIFF) ● Mailer (Swiftmailer) ● Tests unitaires et fonctionnels
  • 67.
  • 68.
    Des Questions ? maissans tee-shirt cette fois-ci ...