Symfony2 Presentation

68
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

description

Symfony2 est un framework PHP pour le développement de sites web. Cette présentation fournit -entre autre- quelques exemples pour commencer à manipuler les concepts et les commandes de base du framework. Elle a été présenté à l'occasion d'un code d'armor sur le sujet (Mardi 19 novembre 2013 de 19:00 à 21:30). Par Eric PARA & Sylvain RAGOT.

Transcript of Symfony2 Presentation

Page 1: Symfony2 Presentation

Symfony2What 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 PARACode d’Armor - 19 novembre 2013

Page 2: Symfony2 Presentation

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 !

Page 3: Symfony2 Presentation

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 ?

Page 4: Symfony2 Presentation

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 ?

Page 5: Symfony2 Presentation

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 ?

Page 6: Symfony2 Presentation

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 ?

Page 7: Symfony2 Presentation

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 ?

Page 8: Symfony2 Presentation

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 ?

Page 9: Symfony2 Presentation

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 ?

Page 10: Symfony2 Presentation

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 ?

Page 11: Symfony2 Presentation

I.0: Petit sondage ...

Quel est votre langage préféré pour le Web en 2013 ?

Sondage developpez.com réalisé sur 457 participants

Page 12: Symfony2 Presentation

I.1: Symfony en une phrase ...

Framework de développement Web en PHP

Page 13: Symfony2 Presentation

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)

Page 14: Symfony2 Presentation

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 patternsMVC: Modèle-Vue-Contrôleur

Encourager les bonnes pratiquesDon’t reinvent the wheel

DRY: Don’t Repeat Yourself

DIE: Duplication Is Evil

Page 15: Symfony2 Presentation

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

Page 16: Symfony2 Presentation

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

Page 17: Symfony2 Presentation

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, …)

Page 18: Symfony2 Presentation

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)

Page 19: Symfony2 Presentation

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)

Page 20: Symfony2 Presentation

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)

Page 21: Symfony2 Presentation

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)

Page 22: Symfony2 Presentation

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)

Page 23: Symfony2 Presentation

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)

Page 24: Symfony2 Presentation

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)

Page 25: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 26: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 27: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 28: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 29: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 30: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 31: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 32: Symfony2 Presentation

Framework de développement Web en PHP

Rasmus Lerdorf, né à Qeqertarsuaq1994: 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 ...

Page 33: Symfony2 Presentation

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]

Page 34: Symfony2 Presentation

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]

Page 35: Symfony2 Presentation

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]

Page 36: Symfony2 Presentation

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]

Page 37: Symfony2 Presentation

I.2: Qui se cache derrière ?

Page 38: Symfony2 Presentation

Aux débuts du web il y eu PHP …

I.3: Quoi d’autre en PHP ?

Page 39: Symfony2 Presentation

Aux débuts du web il y eu PHP …

Très simple, mais limité

I.3: Quoi d’autre en PHP ?

Page 40: Symfony2 Presentation

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

Page 41: Symfony2 Presentation

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é

Page 42: Symfony2 Presentation

“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 ?

Page 43: Symfony2 Presentation

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

Page 44: Symfony2 Presentation

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

Page 45: Symfony2 Presentation

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

Page 46: Symfony2 Presentation

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

Page 47: Symfony2 Presentation

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

Page 48: Symfony2 Presentation

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

Page 49: Symfony2 Presentation

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

Page 50: Symfony2 Presentation

I.5: Qui utilise Symfony ?

Page 51: Symfony2 Presentation

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

Page 52: Symfony2 Presentation

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 />

Page 53: Symfony2 Presentation

II.2: Structure d’un projet Symfony2

● les bundles

● les environnements● le format YAML (YAML Ain't Markup Language)

● les namespaces

namespace Acme\DemoBundle\Controller;

● 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

Page 54: Symfony2 Presentation

II.3: Génération de code

Ce qu’on va faire :

: en 4 commandes

Page 55: Symfony2 Presentation

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 />

Page 56: Symfony2 Presentation

É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; /** * @ORM\Column(name="titre", type="string") */ private $titre; … public function getTitre() { … } public function setTitre() { … }

}

Page 57: Symfony2 Presentation

Étape 3 : Finalisation

● Générer les accesseurs

● Assurer la cohérence du modèleattention à 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 />

Page 58: Symfony2 Presentation

É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 />

Page 59: Symfony2 Presentation

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

Page 60: Symfony2 Presentation

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/

Page 61: Symfony2 Presentation

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)

Page 62: Symfony2 Presentation

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)

Page 63: Symfony2 Presentation

● 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 />

Page 64: Symfony2 Presentation

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

Page 65: Symfony2 Presentation

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.ymlsyl.helper.membres: class: "Syl\CadeauxBundle\Services\MembresHelper" arguments: ["@doctrine.orm.entity_manager"] calls: - [ injectMailer, [ " @syl.service.mail" ] ]

<code />

Page 66: Symfony2 Presentation

En vrac

● Assetic● I18N & L10N (XLIFF)● Mailer (Swiftmailer)● Tests unitaires et fonctionnels

Page 67: Symfony2 Presentation

Fin !

Page 68: Symfony2 Presentation

Des Questions ?

mais sans tee-shirt cette fois-ci ...