SlideShare une entreprise Scribd logo
symfony
                    Un Framework Open-Source
                      pour les Professionnels

                                   Fabien Potencier
                          http://www.symfony-project.com/
                               http://www.sensio.com/



AFUP - 06/03/2007   www.symfony-project.com    fabien.potencier@sensio.com   www.sensio.com
Sensio
  • Agence créée en 1998
          – Groupe de 150 personnes
          – 30 personnes dédiées au nouvelles technologies

                                  SENSIO
                              Agence Interactive



                                                                                        Conseil en stratégie Internet
                                                Technologies
                    Webmarketing
                                                  Internet
                                                                                        Développement d’applications
                                                                                         interactives à valeur ajoutée

                                                Technologies
                                                 Open Source
                                              (Framework PHP)




AFUP - 06/03/2007             www.symfony-project.com     fabien.potencier@sensio.com     www.sensio.com
Nos clients




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Sensio Labs
  • Des clients Grands Comptes et Institutionnels
          – Conseil en stratégie Internet
          – Assistance à maîtrise d’ouvrage
          – Audit / Formation
          – Développement Internet/Intranet




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Sensio Labs
  • Spécialiste du monde Open-Source (LAMP)
          – Linux
          – Apache
          – MySQL / PostgreSQL
          – PHP / Perl / Python / Ruby
  • Un pôle R&D dédié à l’Open-Source

                                                                                    Créateur
                                                                                 Framework PHP
                                                                                    symfony

AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
symfony
  •     Framework Web PHP                             Licence
  •     Basé sur 9 ans d’expérience Sensio               MIT

  •     Basé sur des projets existants
  •     Open-Source
                                             Rapprocher
  •     Conçu pour gérer :             le monde de l’Entreprise
                                                                             et le monde de l’Open-Source
          – Des sites professionnels
          – Des problématiques complexes
          – Dans des environnements exigeants


AFUP - 06/03/2007   www.symfony-project.com    fabien.potencier@sensio.com   www.sensio.com
Pourquoi PHP ?
  •     Langage de script dynamique
  •     Choisi par les Grands Comptes
  •     Communauté importante
  •     Bien documenté
  •     Performant
  •     Facile à héberger




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Framework Web
                                    « Cadre de Travail »

  • Composants logiciels génériques
          – Préfabriqués
          – Intégrés
          – Répondent aux problématiques Web
  • Professionnalisation des développements
          –   Structuration
          –   Standardisation
          –   Industrialisation
          –   Pérennité


AFUP - 06/03/2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
CMS - Content Management System
  • CMS traditionnel
         – Fonctionnalités standards
         – Outil de contribution standard
          Le site s’adapte au CMS                                                                       =
  • CMS basé sur symfony                                                                                CMS

          – Briques logicielles CMS
                    • Editeur rich text, URLs propres, cache, gestion des comptes
                      utilisateurs, plugins…
          Le CMS s’adapte au site
                                                                                                     Efficacité
                                                                                                    Productivité

AFUP - 06/03/2007          www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Ne pas réinventer la roue
  • Architecture MVC : Modèle / Vue / Contrôleur
  • Normes de développement
  • Couche d’abstraction Objet-Relationnel
  • Tests unitaires et fonctionnels
  • Gestion des déploiements, support des
    environnements
  • Sécurité (protection XSS par défaut)
  • Extensibilité (système de plugins)

AFUP - 06/03/2007    www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Développer plus vite
  • Une ligne de code a un coût
          – Pour l’écrire                                                           moins de code
                                                                                           
          – Pour la tester
                                                                                  moins de complexité
          – Pour la maintenir                                                              
                                                                                    moins de bugs
  • Ecrire moins de code                                                                   
          –   Architecture : contrôleur, ORM, …                                   gain de productivité
                                                                                           
          –   Fichiers de configuration
                                                                                     gain de temps
          –   Autoloading
          –   Générateurs
          –   Helpers
  • Plus de temps pour les règles métiers, cas limites, …
AFUP - 06/03/2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
symfony, un Framework Web

                                                              Architecture MVC
                        Lisibilité                            Standardisation
                           
                      Maintenabilité                          Tests unitaires et fonctionnels
                                                              Documentation API
                           
                       Evolutivité                            Orienté Objets
                                                              Plugins
                           
                       Pérennité




AFUP - 06/03/2007       www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Les Atouts Fonctionnels
  •     Documentation
  •     Configurabilité
  •     Protection XSS                                                               Les Standards
  •     Aide debugging                                                                   PHP 5
                                                                                          MVC
  •     Tests fonctionnels                                                              Routing
  •     Admin Generator                                                                  Cache
  •     ORM : Propel ou Doctrine
  •     i18n / l10n
  •     Extensibilité : Plugins
  •     1.0 maintenue sur le long terme
AFUP - 06/03/2007    www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Création d’une Application
  $ pear channel-discover pear.symfony-project.com
  $ pear install symfony/symfony-stable
                                                                                      Installation Subversion
                                                                                     Package Téléchargeable
  $ mkdir ~/sfdemo
  $ cd ~/sfdemo
                                                                                                  Projet
                                                                                                   
                                                                                               Application(s)
  $ symfony init-project sfdemo                                                                    
  $ ./symfony init-app frontend                                                                  Module(s)
                                                                                                   
                                                                                                 Action(s)
                                                                                               Composant(s)
                                                                                                     
                                                                                                 Template


AFUP - 06/03/2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Base de données
  • Configuration de la base de données
         # config/databases.yml
         prod:
                                                                                              Gestion
           propel:
                                                                                        des environnements
             param:
               password: PAssWD
         all:
           propel:
             class:       sfPropelDatabase
             param:
               dsn:       mysql://root:@localhost/blog

  • Définition du schéma                                                                   Abstraction SQL
         # config/schema.yml
         post:
           title:        { type:        varchar, size: 255 }
           content:      { type:        longvarchar }
           is_published: { type:        boolean }
           author_id:    { type:        integer, foreignTable: author, foreignReference: id }
           created_on:   ~
AFUP - 06/03/2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Base de données
  • Création des données de tests
            # config/fixtures.yml
            Author:
              fabien:
                first_name: Fabien
                last_name: Potencier
            Post:
              first_post:
                author_id: fabien
                title:     Conférence AFUP                                   1) Crée les classes du modèle
                                                                             2) Converti le schéma en SQL
                                                                             3) Crée les tables
  $ ./symfony propel-build-all-load
                                                                             4) Charge les données de test


AFUP - 06/03/2007    www.symfony-project.com   fabien.potencier@sensio.com    www.sensio.com
Le Modèle
  // lib/model/Author.php
  class Author extends BaseAuthor
  {
    function getFullName()
    {
      return $this->getFirstName().' '.$this->getLastName();
    }
  }

  $author = new Author();                                                                 ORM
  $author->setFirstName('Fabien');                                             Object Relationship Mapping
  $author->setLastName('Potencier');                                                Propel / Doctrine
  $author->save();

  $post = new Post();
  $post->setAuthor($author);
  $post->setPublishedOn('12:00 tomorrow');
  $post->save();

  $posts = PostPeer::doSelect(new Criteria());

AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Création du Back-Office
  • Création automatique d’une Console
    d’Administration de Production
          – Listes                  – Filtres                                          Code généré MVC
                                                                                       et personnalisable
          – Pagination              – Validation                                      Fichier configuration
                                                                                           Contrôleur
          – Tri                     – CRUD                                                 Templates


  $ ./symfony propel-init-admin frontend post Post



                                                                                 1) Crée un module post
                                                                                 2) Génère la configuration


AFUP - 06/03/2007    www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Admin Generator
  • Liste




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Admin Generator
  • Edition




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Configurabilité
  • Au niveau des modules
          # apps/frontend/modules/post/config/generator.yml
          generator:
             class:         sfPropelAdminGenerator
             param:                                         Configuration en cascade
               model_class: Post
                                                                  Framework
           list:
             display: [=title, author, created_on]                   Projet
             filters: [title, author, published_on]                Application
                                                                                                Module
  • Au niveau de l’application
          # apps/frontend/config/security.yml
          default:
            is_secure:   on
            credentials: admin

  $ ./symfony plugin-install                                                                        LOC : 0
    http://plugins.symfony-project.com/sfGuardPlugin

AFUP - 06/03/2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Création du Front-Office
  • Routing bidirectionnel
                                                           /

   # apps/frontend/config/routing.yml                          # apps/fontend/modules/post/templates/listSuccess.php
                                                               <?php echo url_for('@homepage') ?>
                                                  
   homepage:
     url:   /
     param: { module: blog, action: recent }



                             /blog/2007/03/06/conference-afup.html

 # apps/frontend/config/routing.yml                        # apps/fontend/modules/post/templates/listSuccess.php
 post:                                                     <?php echo link_to(
   url:   /blog/:year/:month/:day/:slug.html                 $post->getTitle(),
                                                             sprintf('@post?year=%d&month=%d&day=%d&slug=%s',
                                                  
   param: { module: blog, action: show }
                                                               $post->getCreatedOn('Y'),
   requirements:
                                                               $post->getCreatedOn('m'),
     year: d{4}
                                                               $post->getCreatedOn('d'),
     month: dd
                                                               $post->getSlug()
     day:   dd                                           )) ?>

AFUP - 06/03/2007       www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Tests Fonctionnels
  • Scénario de navigation
          // test/functional/frontend/postActionsTest.php
          $browser = new sfTestBrowser();
          $browser->initialize();                                       TDD
          $browser->                                          Test Driven Development
            get('/')->
            isStatusCode(200)->
            checkResponseElement('h1.title', '/Conférence AFUP/');

  $ ./symfony test-functional frontend
  # get /
  ok 1 - status code is 200
  not ok 2 - response selector h1 does not match regex /Conférence AFUP/
  # Looks like you failed 1 tests of 4
  1..2



AFUP - 06/03/2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Notre première ligne de code
  # apps/frontend/modules/post/actions/actions.class.php
  class postActions extends sfActions
  {
    function executeShow()
    {
      $id = $this->getRequestParameter('id');
      $this->post = PostPeer::retrieveByPk($id);             MVC
      $this->forward404Unless($this->post);        Modèle / Vue / Contrôleur
    }                                                        XSS
  }                                                   Sécurité par défaut


  # apps/frontend/modules/post/templates/showSuccess.php
  <h1 class="title"><?php echo $post->getTitle() ?></h1>
  <h2>par <?php echo $post->getAuthor()->getFullName() ?></h2>
  <p><?php echo $post->getHtmlContent(ESC_RAW) ?></p>

AFUP - 06/03/2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Outils pour débugger
  • Web Debug Toolbar




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Outils pour débugger
  • Messages d’erreurs




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Déploiement
  $ ./symfony test-all
  functional/frontend/postActionsTest......................ok
  All tests successful.
  Files=1, Tests=2

  # config/properties.ini
  [production]
    host=1.2.3.4
    user=fabien
    dir=/var/www/sfblog
    type=rsync

  $ ./symfony sync production go


AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Un Framework pour les Professionnels
  •     Issue de l’expérience
  •     1.0 stable, maintenue et support commercial
  •     Communauté haut de gamme, support
  •     Extensibilité
  •     Stabilité de l’API
  •     Documentation
                                                                                       Une vision du Web
                                                                                        Professionnelle
                                                                                         Pragmatique


AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Quelques Chiffres
  •     3 ans de R&D
  •     Version 1.0 stable
  •     Support commercial
  •     Documentation Open-Source
          – Livre référence (450 pages - GFDL)
          – Tutorial pas à pas (250 pages)
  • Communauté importante
                                                                                              Mature
          – Développeurs dans 80 pays                                                        Reconnu
          – 100 000 visiteurs uniques par mois
AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
De Belles Références
  • Yahoo! (USA)
          – Yahoo! Bookmarks
          – 20 millions d’utilisateurs
          – Web 2.0 / AJAX




AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Rejoignez-nous
  • Sensio Labs recrute
          – Des développeurs
          – Des chefs de projet technique
  • Le Web est l’une de vos passions ?
          – Développeur : Vous avez une expérience dans le
            développement de sites Web en PHP voire en
            symfony. Vous développez en PHP5 objets, vous
            connaissez l’AJAX.
          – Chef de Projet : Vous êtes développeur et vous
            souhaitez gérer des projets pour des grands comptes.

AFUP - 06/03/2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
SENSIO S.A.
                                   26, rue Salomon de Rothschild
                                      92 286 SURESNES cedex
                                               Tél. : 01 40 99 80 80
                                               Fax : 01 40 99 83 34

                                                Contact
                                           Fabien Potencier
                                     fabien.potencier@sensio.com




        http://www.sensio.com/                                       http://www.symfony-project.com/

AFUP - 06/03/2007    www.symfony-project.com      fabien.potencier@sensio.com   www.sensio.com

Contenu connexe

PDF
symfony : Un Framework Open-Source pour les Professionnels
ODP
Presentation du framework symfony
PDF
Mieux Développer en PHP avec Symfony
ODP
Symfony Best Practices
PPT
Presentation Symfony
PPTX
Symfony 2 : chapitre 1 - Présentation Générale
PDF
Symfony2 Presentation
PPTX
Atelier Symfony2- Introduction
symfony : Un Framework Open-Source pour les Professionnels
Presentation du framework symfony
Mieux Développer en PHP avec Symfony
Symfony Best Practices
Presentation Symfony
Symfony 2 : chapitre 1 - Présentation Générale
Symfony2 Presentation
Atelier Symfony2- Introduction

Tendances (20)

PDF
Une application en deux heure - PHP Québec Janvier 2009
PPT
Symfony 2 : chapitre 2 - Les vues en Twig
PPTX
Presentation Symfony2
PDF
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
PPTX
Symfony3 overview
PPTX
Présentation symfony epita
PDF
Symfony2: 30 astuces et bonnes pratiques
PDF
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
PPTX
Symfony 2 et le Web
PDF
Formation Symfony2 par KNP Labs
PDF
Introduction à Symfony2
PPT
PHP5 et Zend Framework
PPT
Principes De Base De Asp .Net
PDF
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
PPT
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
PPTX
EcmaScript
PDF
Alphorm.com Formation Docker (2/2) - Administration Avancée
PDF
symfony : Simplifier le développement des interfaces bases de données (PHP ...
PPTX
Initiation à ASP.NET 4.0
PDF
Alphorm.com Formation React Package Manager : npm et yarn
Une application en deux heure - PHP Québec Janvier 2009
Symfony 2 : chapitre 2 - Les vues en Twig
Presentation Symfony2
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
Symfony3 overview
Présentation symfony epita
Symfony2: 30 astuces et bonnes pratiques
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Symfony 2 et le Web
Formation Symfony2 par KNP Labs
Introduction à Symfony2
PHP5 et Zend Framework
Principes De Base De Asp .Net
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Plateforme De DéVeloppement En Php5 (Zend + Doctrine)
EcmaScript
Alphorm.com Formation Docker (2/2) - Administration Avancée
symfony : Simplifier le développement des interfaces bases de données (PHP ...
Initiation à ASP.NET 4.0
Alphorm.com Formation React Package Manager : npm et yarn
Publicité

En vedette (9)

PDF
Orchestrez vos projets Symfony sans fausses notes
PDF
Symfi formation-symfony-les-bases
PDF
Working with oro crm entities
PPTX
OroPlatform and OroCRM from a developer's perspective
PDF
Tutoriel java
PPTX
Symfony with angular.pptx
PDF
wallabag, comment on a migré vers symfony3
PDF
Présentation de symfony - Human talks aux docks le 8 juillet 2014
PDF
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Orchestrez vos projets Symfony sans fausses notes
Symfi formation-symfony-les-bases
Working with oro crm entities
OroPlatform and OroCRM from a developer's perspective
Tutoriel java
Symfony with angular.pptx
wallabag, comment on a migré vers symfony3
Présentation de symfony - Human talks aux docks le 8 juillet 2014
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Publicité

Similaire à Presentation symfony (20)

PDF
symfony: Simplifier vos développement Web professionnels avec PHP (Symfony P...
PDF
Webinar offre entreprise
PDF
20090727 Cv Synca7 Eric Viala
PPTX
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
PPTX
Symfony et le Web
PDF
Seminaire Portail Open Source
PDF
Industrialiser PHP - Open World Forum 2011
PDF
S29 valorisation de l'existant ibm i avec php
PDF
Votre site eCommerce avec Drupal Commerce dans le cloud Azure
PPTX
Les CMS basés sur framework - PHP Tour 2011
PDF
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
PDF
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
PDF
201003 Solutions Linux
PDF
201003 Solutions Linux
PDF
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
PDF
Monitoring d'applications PHP, Salon des solutions Linux Open Source
PDF
Keynote change 2013
PPTX
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
PDF
Ontomantics Introduction
PPT
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
symfony: Simplifier vos développement Web professionnels avec PHP (Symfony P...
Webinar offre entreprise
20090727 Cv Synca7 Eric Viala
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
Symfony et le Web
Seminaire Portail Open Source
Industrialiser PHP - Open World Forum 2011
S29 valorisation de l'existant ibm i avec php
Votre site eCommerce avec Drupal Commerce dans le cloud Azure
Les CMS basés sur framework - PHP Tour 2011
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
201003 Solutions Linux
201003 Solutions Linux
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring d'applications PHP, Salon des solutions Linux Open Source
Keynote change 2013
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
Ontomantics Introduction
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?

Dernier (7)

PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
PDF
Modems expliqués- votre passerelle vers Internet.pdf
PDF
presentation_with_intro_compressee IEEE EPS France
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PPTX
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
PDF
FORMATION EN Programmation En Langage C.pdf
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
Modems expliqués- votre passerelle vers Internet.pdf
presentation_with_intro_compressee IEEE EPS France
Presentation_Securite_Reseaux_Bac+2.pptx
Tendances tech 2025 - SFEIR & WENVISION.pdf
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
FORMATION EN Programmation En Langage C.pdf

Presentation symfony

  • 1. symfony Un Framework Open-Source pour les Professionnels Fabien Potencier http://www.symfony-project.com/ http://www.sensio.com/ AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 2. Sensio • Agence créée en 1998 – Groupe de 150 personnes – 30 personnes dédiées au nouvelles technologies SENSIO Agence Interactive Conseil en stratégie Internet Technologies Webmarketing Internet Développement d’applications interactives à valeur ajoutée Technologies Open Source (Framework PHP) AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 3. Nos clients AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 4. Sensio Labs • Des clients Grands Comptes et Institutionnels – Conseil en stratégie Internet – Assistance à maîtrise d’ouvrage – Audit / Formation – Développement Internet/Intranet AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 5. Sensio Labs • Spécialiste du monde Open-Source (LAMP) – Linux – Apache – MySQL / PostgreSQL – PHP / Perl / Python / Ruby • Un pôle R&D dédié à l’Open-Source Créateur Framework PHP symfony AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 6. symfony • Framework Web PHP Licence • Basé sur 9 ans d’expérience Sensio MIT • Basé sur des projets existants • Open-Source Rapprocher • Conçu pour gérer : le monde de l’Entreprise et le monde de l’Open-Source – Des sites professionnels – Des problématiques complexes – Dans des environnements exigeants AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 7. Pourquoi PHP ? • Langage de script dynamique • Choisi par les Grands Comptes • Communauté importante • Bien documenté • Performant • Facile à héberger AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 8. Framework Web « Cadre de Travail » • Composants logiciels génériques – Préfabriqués – Intégrés – Répondent aux problématiques Web • Professionnalisation des développements – Structuration – Standardisation – Industrialisation – Pérennité AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 9. CMS - Content Management System • CMS traditionnel – Fonctionnalités standards – Outil de contribution standard  Le site s’adapte au CMS = • CMS basé sur symfony CMS – Briques logicielles CMS • Editeur rich text, URLs propres, cache, gestion des comptes utilisateurs, plugins…  Le CMS s’adapte au site Efficacité Productivité AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 10. Ne pas réinventer la roue • Architecture MVC : Modèle / Vue / Contrôleur • Normes de développement • Couche d’abstraction Objet-Relationnel • Tests unitaires et fonctionnels • Gestion des déploiements, support des environnements • Sécurité (protection XSS par défaut) • Extensibilité (système de plugins) AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 11. Développer plus vite • Une ligne de code a un coût – Pour l’écrire moins de code  – Pour la tester moins de complexité – Pour la maintenir  moins de bugs • Ecrire moins de code  – Architecture : contrôleur, ORM, … gain de productivité  – Fichiers de configuration gain de temps – Autoloading – Générateurs – Helpers • Plus de temps pour les règles métiers, cas limites, … AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 12. symfony, un Framework Web Architecture MVC Lisibilité Standardisation  Maintenabilité Tests unitaires et fonctionnels Documentation API  Evolutivité Orienté Objets Plugins  Pérennité AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 13. Les Atouts Fonctionnels • Documentation • Configurabilité • Protection XSS Les Standards • Aide debugging PHP 5 MVC • Tests fonctionnels Routing • Admin Generator Cache • ORM : Propel ou Doctrine • i18n / l10n • Extensibilité : Plugins • 1.0 maintenue sur le long terme AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 14. Création d’une Application $ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-stable Installation Subversion Package Téléchargeable $ mkdir ~/sfdemo $ cd ~/sfdemo Projet  Application(s) $ symfony init-project sfdemo  $ ./symfony init-app frontend Module(s)  Action(s) Composant(s)  Template AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 15. Base de données • Configuration de la base de données # config/databases.yml prod: Gestion propel: des environnements param: password: PAssWD all: propel: class: sfPropelDatabase param: dsn: mysql://root:@localhost/blog • Définition du schéma Abstraction SQL # config/schema.yml post: title: { type: varchar, size: 255 } content: { type: longvarchar } is_published: { type: boolean } author_id: { type: integer, foreignTable: author, foreignReference: id } created_on: ~ AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 16. Base de données • Création des données de tests # config/fixtures.yml Author: fabien: first_name: Fabien last_name: Potencier Post: first_post: author_id: fabien title: Conférence AFUP 1) Crée les classes du modèle 2) Converti le schéma en SQL 3) Crée les tables $ ./symfony propel-build-all-load 4) Charge les données de test AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 17. Le Modèle // lib/model/Author.php class Author extends BaseAuthor { function getFullName() { return $this->getFirstName().' '.$this->getLastName(); } } $author = new Author(); ORM $author->setFirstName('Fabien'); Object Relationship Mapping $author->setLastName('Potencier'); Propel / Doctrine $author->save(); $post = new Post(); $post->setAuthor($author); $post->setPublishedOn('12:00 tomorrow'); $post->save(); $posts = PostPeer::doSelect(new Criteria()); AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 18. Création du Back-Office • Création automatique d’une Console d’Administration de Production – Listes – Filtres Code généré MVC et personnalisable – Pagination – Validation Fichier configuration Contrôleur – Tri – CRUD Templates $ ./symfony propel-init-admin frontend post Post 1) Crée un module post 2) Génère la configuration AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 19. Admin Generator • Liste AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 20. Admin Generator • Edition AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 21. Configurabilité • Au niveau des modules # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator param: Configuration en cascade model_class: Post Framework list: display: [=title, author, created_on] Projet filters: [title, author, published_on] Application Module • Au niveau de l’application # apps/frontend/config/security.yml default: is_secure: on credentials: admin $ ./symfony plugin-install LOC : 0 http://plugins.symfony-project.com/sfGuardPlugin AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 22. Création du Front-Office • Routing bidirectionnel / # apps/frontend/config/routing.yml # apps/fontend/modules/post/templates/listSuccess.php <?php echo url_for('@homepage') ?>  homepage: url: / param: { module: blog, action: recent } /blog/2007/03/06/conference-afup.html # apps/frontend/config/routing.yml # apps/fontend/modules/post/templates/listSuccess.php post: <?php echo link_to( url: /blog/:year/:month/:day/:slug.html $post->getTitle(), sprintf('@post?year=%d&month=%d&day=%d&slug=%s',  param: { module: blog, action: show } $post->getCreatedOn('Y'), requirements: $post->getCreatedOn('m'), year: d{4} $post->getCreatedOn('d'), month: dd $post->getSlug() day: dd )) ?> AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 23. Tests Fonctionnels • Scénario de navigation // test/functional/frontend/postActionsTest.php $browser = new sfTestBrowser(); $browser->initialize(); TDD $browser-> Test Driven Development get('/')-> isStatusCode(200)-> checkResponseElement('h1.title', '/Conférence AFUP/'); $ ./symfony test-functional frontend # get / ok 1 - status code is 200 not ok 2 - response selector h1 does not match regex /Conférence AFUP/ # Looks like you failed 1 tests of 4 1..2 AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 24. Notre première ligne de code # apps/frontend/modules/post/actions/actions.class.php class postActions extends sfActions { function executeShow() { $id = $this->getRequestParameter('id'); $this->post = PostPeer::retrieveByPk($id); MVC $this->forward404Unless($this->post); Modèle / Vue / Contrôleur } XSS } Sécurité par défaut # apps/frontend/modules/post/templates/showSuccess.php <h1 class="title"><?php echo $post->getTitle() ?></h1> <h2>par <?php echo $post->getAuthor()->getFullName() ?></h2> <p><?php echo $post->getHtmlContent(ESC_RAW) ?></p> AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 25. Outils pour débugger • Web Debug Toolbar AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 26. Outils pour débugger • Messages d’erreurs AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 27. Déploiement $ ./symfony test-all functional/frontend/postActionsTest......................ok All tests successful. Files=1, Tests=2 # config/properties.ini [production] host=1.2.3.4 user=fabien dir=/var/www/sfblog type=rsync $ ./symfony sync production go AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 28. Un Framework pour les Professionnels • Issue de l’expérience • 1.0 stable, maintenue et support commercial • Communauté haut de gamme, support • Extensibilité • Stabilité de l’API • Documentation Une vision du Web Professionnelle Pragmatique AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 29. Quelques Chiffres • 3 ans de R&D • Version 1.0 stable • Support commercial • Documentation Open-Source – Livre référence (450 pages - GFDL) – Tutorial pas à pas (250 pages) • Communauté importante Mature – Développeurs dans 80 pays Reconnu – 100 000 visiteurs uniques par mois AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 30. De Belles Références • Yahoo! (USA) – Yahoo! Bookmarks – 20 millions d’utilisateurs – Web 2.0 / AJAX AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 31. Rejoignez-nous • Sensio Labs recrute – Des développeurs – Des chefs de projet technique • Le Web est l’une de vos passions ? – Développeur : Vous avez une expérience dans le développement de sites Web en PHP voire en symfony. Vous développez en PHP5 objets, vous connaissez l’AJAX. – Chef de Projet : Vous êtes développeur et vous souhaitez gérer des projets pour des grands comptes. AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 32. SENSIO S.A. 26, rue Salomon de Rothschild 92 286 SURESNES cedex Tél. : 01 40 99 80 80 Fax : 01 40 99 83 34 Contact Fabien Potencier fabien.potencier@sensio.com http://www.sensio.com/ http://www.symfony-project.com/ AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com