symfony
                         Simplifier le développement des
                           interfaces bases de données

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



Forum PHP - Paris 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Sensio Labs | Fabien Potencier
  • Sensio
                                                                                                    Sensio
          –   Agence Interactive                                                               Agence Interactive

          –   Créée en 1998                                                         Webmarketing
                                                                                                              Technologies
                                                                                                                Internet
          –   Groupe de 150 personnes
          –   30 personnes dédiées à Internet


  • Spécialiste du monde Open-Source                                                        Créateur
          – Un pôle R&D dédié à l’Open-Source                                          Framework symfony


  • Des clients Grands Comptes et Institutionnels


Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
symfony
  • Framework Web PHP 5
  • Basé sur
          – 9 ans d’expérience Sensio
          – des projets Open-Source existants
  • Open-Source
  • Conçu pour gérer :
          – Sites professionnels
          – Problématiques complexes                                                            Licence MIT

          – Environnements exigeants

Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Les Buts de symfony
  • Rapprocher le monde de l’Entreprise
    et le monde de l’Open-Source

  • Développer plus vite

  • Ne pas réinventer la roue




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Développer plus vite
  • Une ligne de code a un coût
                                                                                    moins de code
          – Pour l’écrire                                                                  
          – Pour la tester                                                        moins de complexité
          – Pour la maintenir                                                              
                                                                                    moins de bugs
  • Ecrire moins de code                                                                   
                                                                                  gain de productivité
          –   Architecture : contrôleur, ORM, …                                            
          –   Fichiers de configuration                                              gain de temps
          –   Autoloading
          –   Générateurs
          –   Helpers
  • Plus de temps pour les règles métiers, cas limites, …
Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Ne pas réinventer la roue
  • Intégrer les Bonnes Pratiques
  • Architecture MVC : Modèle / Vue / Contrôleur

  • Tests unitaires et fonctionnels
  •     Gestion des déploiements, support des environnements
  •     Configurabilité
  •     Sécurité (protection XSS et CSRF par défaut)
  •     Extensibilité (système de plugins)
  •     Admin Generator                               simplifier
                                                                                                        la vie


Forum PHP - Paris 2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Les Principaux Atouts
  • symfony, c’est du code efficace
    mais c’est également…
  • Documentation
          – Un livre sous licence GFDL (450p)
          – Le tutorial askeet (250p)
  • 1.0 maintainue par Sensio
          – ~1 mise à jour par mois (bugs)
          – Support Commercial                                                                        1.0
          – Formations


Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Interfaces Bases de Données
  • Des besoins différents selon la cible
          – Pour l’administrateur
          – Pour le développeur
          – Pour le client
  • Des moteurs différents
          –   MySQL
          –   PostgreSQL
          –   Oracle
          –   MS SQL
          –   DB2
          –   …


Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Pour l’Administrateur
  • La ligne de commande
  • Interfaces visuelles Desktop ou Web
          – phpMyAdmin / MySQL Administrator
          – phpPgAdmin / pgAdmin




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Pour le Développeur
  • Couche d’abstraction Base de données
          – Creole
          – PDO (PHP 5.1)
  • ORM Tools (Object Relational Mapping)
          – Propel
          – Doctrine
  • Générateurs dans symfony



Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Pour le Client
  • Front-Office :
          – Interaction en lecture principalement
          – Formulaires


  • Back-Office
          – Listes, filtres, pagination
          – CRUD : Create Read Update Delete




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Abstraction SQL
  • Creole permet d’abstraire les différences SQL
          – Gestion des limit / offset
          – Gestion des dates
          –…




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

  $author = new Author();
  $author->setFirstName('Fabien');
  $author->setLastName('Potencier');
  $author->save();

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

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



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

  $author = new Author();
  $author->setFirstName('Fabien');
  $author->setLastName('Potencier');
                                                                      Même mode de fonctionnement que Propel
  $author->save();

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




  $posts = Doctrine::getTable('Post')->findAll();

  $post = Doctrine::getTable('Post')->find($request->getParameter('id'));




Forum PHP - Paris 2007                 www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.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


Forum PHP - Paris 2007    www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Admin Generator
  • Liste




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Admin Generator
  • Edition




   __toString()


                                                         widgets                                      m2m relationship


Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Extensibilité
  • Extension du module
         class postActions extends autoPostActions
         {
           protected function addFiltersCriteria($c)                                                     Generated
           {                                                                                              module
             $c->add(PostPeer::IS_PUBLISHED, true);
             parent::addFiltersCriteria($c);
           }
         }

  • Personnalisation des templates
              _edit_* : actions, footer, form, header, messages
              _list_* : footer, header, messages, td_actions, t(d|h)_stacked, t(d|h)_tabular
              _filters, editSuccess, listSuccess

Forum PHP - Paris 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Configurabilité

           # apps/frontend/modules/post/config/generator.yml
           generator:
              class:         sfPropelAdminGenerator
              param:
                model_class: Post
            list:
              display: [=title, author, created_on]
              filters: [title, author, published_on]




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Démonstration




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Les Formulaires
  • Peu de valeur ajoutée du développeur…
  • ... mais sujet complexe
          – Validation
          – Affichage
          – Sérialisation en base de données
          – Séparation entre les 3 couches MVC




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Les Formulaires dans symfony 1.1
  • 3 niveaux
          – sfValidator : gestion de la validation
          – sfWidget : gestion des widgets HTML
          – sfForm : gestion du cycle de vie d’un formulaire




Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
sfFormPropel
  • Formulaire générées pour les objets Propel
  • Entièrement personnalisables
  • Introspection du schéma :
          – Converti le type Propel/Creole en validateurs et
            widgets symfony
          – Clés étrangères
          – Relations n / n
          – Gestion des tables d’internationalisation



Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
sfFormPropel
  class bookActions        extends sfActions
  {
    public function        executeEdit($request)
    {
      $this->book =        BookPeer::retrieveByPk($request->getParameter('id'));
      $this->form =        new AuthorForm($this->book);

          if ($request->isMethod('post'))
          {
            $this->form->bind($request->getParameter('book');
            if ($this->form->isValid())
            {
              $book = $this->form->save();

                  $this->redirect('@book?id='.$book->getId());
              }
          }
      }
  }


Forum PHP - Paris 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Personnaliser les Forms Propel
  class BookForm extends BaseBookForm
  {
    public function configure()
    {
      $this->embedI18n(array('en', 'fr'));

          $this->widgetSchema['en']->setLabel('en', 'English');

          unset($this['created_at']);

          $this->validatorSchema['foo'] = new sfValidatorPass();
          $this->widgetSchema['foo'] = new sfWidgetIdentity();

          $this->setDefault('published_on', time());
      }
  }



Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Un Framework pour les Professionnels
  •     Issue de l’expérience
  •     1.0 stable, maintenue et support commercial
  •     Communauté large et compétente
  •     Extensibilité
  •     Stabilité de l’API
  •     Documentation
                                                                                          Une vision du Web
                                                                                           Professionnelle
                                                                                            Pragmatique


Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.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
          – 300 000 visiteurs par mois
Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Next symfony Workshops


   En français : Paris, France - Dec 05, 2007

      In English : Paris, France - Feb 13, 2008

            Plus d’informations sur www.sensiolabs.com


Forum PHP - Paris 2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Rejoignez-nous
  • Sensio Labs recrute en France
          – 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.

Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com
Sensio S.A.
                                     26, rue Salomon de Rothschild
                                         92 286 Suresnes cedex
                                                 France
                                            Tél. : +33 1 40 99 80 80
                                            Fax : +33 1 40 99 83 34

                                                 Contact
                                            Fabien Potencier
                                      fabien.potencier@sensio.com




        http://www.sensiolabs.com/                                  http://www.symfony-project.com/
Forum PHP - Paris 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensiolabs.com

symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

  • 1.
    symfony Simplifier le développement des interfaces bases de données Fabien Potencier http://www.symfony-project.com/ http://www.sensiolabs.com/ Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 2.
    Sensio Labs |Fabien Potencier • Sensio Sensio – Agence Interactive Agence Interactive – Créée en 1998 Webmarketing Technologies Internet – Groupe de 150 personnes – 30 personnes dédiées à Internet • Spécialiste du monde Open-Source Créateur – Un pôle R&D dédié à l’Open-Source Framework symfony • Des clients Grands Comptes et Institutionnels Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 3.
    symfony •Framework Web PHP 5 • Basé sur – 9 ans d’expérience Sensio – des projets Open-Source existants • Open-Source • Conçu pour gérer : – Sites professionnels – Problématiques complexes Licence MIT – Environnements exigeants Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 4.
    Les Buts desymfony • Rapprocher le monde de l’Entreprise et le monde de l’Open-Source • Développer plus vite • Ne pas réinventer la roue Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 5.
    Développer plus vite • Une ligne de code a un coût moins de code – Pour l’écrire  – Pour la tester moins de complexité – Pour la maintenir  moins de bugs • Ecrire moins de code  gain de productivité – Architecture : contrôleur, ORM, …  – Fichiers de configuration gain de temps – Autoloading – Générateurs – Helpers • Plus de temps pour les règles métiers, cas limites, … Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 6.
    Ne pas réinventerla roue • Intégrer les Bonnes Pratiques • Architecture MVC : Modèle / Vue / Contrôleur • Tests unitaires et fonctionnels • Gestion des déploiements, support des environnements • Configurabilité • Sécurité (protection XSS et CSRF par défaut) • Extensibilité (système de plugins) • Admin Generator simplifier la vie Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 7.
    Les Principaux Atouts • symfony, c’est du code efficace mais c’est également… • Documentation – Un livre sous licence GFDL (450p) – Le tutorial askeet (250p) • 1.0 maintainue par Sensio – ~1 mise à jour par mois (bugs) – Support Commercial 1.0 – Formations Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 8.
    Interfaces Bases deDonnées • Des besoins différents selon la cible – Pour l’administrateur – Pour le développeur – Pour le client • Des moteurs différents – MySQL – PostgreSQL – Oracle – MS SQL – DB2 – … Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 9.
    Pour l’Administrateur • La ligne de commande • Interfaces visuelles Desktop ou Web – phpMyAdmin / MySQL Administrator – phpPgAdmin / pgAdmin Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 10.
    Pour le Développeur • Couche d’abstraction Base de données – Creole – PDO (PHP 5.1) • ORM Tools (Object Relational Mapping) – Propel – Doctrine • Générateurs dans symfony Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 11.
    Pour le Client • Front-Office : – Interaction en lecture principalement – Formulaires • Back-Office – Listes, filtres, pagination – CRUD : Create Read Update Delete Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 12.
    Abstraction SQL • Creole permet d’abstraire les différences SQL – Gestion des limit / offset – Gestion des dates –… Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 13.
    Le Modèle (Propel) // lib/model/Author.php class Author extends BaseAuthor { function getFullName() { return $this->getFirstName().' '.$this->getLastName(); } } $author = new Author(); $author->setFirstName('Fabien'); $author->setLastName('Potencier'); $author->save(); $post = new Post(); $post->setAuthor($author); $post->setPublishedOn('tomorrow 12:00'); $post->isPublished(true); $post->save(); $posts = PostPeer::doSelect(new Criteria()); Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 14.
    Le Modèle (Doctrine) // lib/model/doctrine/lib/Author.php class Author extends BaseAuthor { function getFullName() { return $this->getFirstName().' '.$this->getLastName(); } } $author = new Author(); $author->setFirstName('Fabien'); $author->setLastName('Potencier'); Même mode de fonctionnement que Propel $author->save(); $post = new Post(); $post->setAuthor($author); $post->setPublishedOn('tomorrow 12:00'); $post->isPublished(true); $post->save(); $posts = Doctrine::getTable('Post')->findAll(); $post = Doctrine::getTable('Post')->find($request->getParameter('id')); Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 15.
    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 Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 16.
    Admin Generator • Liste Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 17.
    Admin Generator • Edition __toString() widgets m2m relationship Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 18.
    Extensibilité •Extension du module class postActions extends autoPostActions { protected function addFiltersCriteria($c) Generated { module $c->add(PostPeer::IS_PUBLISHED, true); parent::addFiltersCriteria($c); } } • Personnalisation des templates _edit_* : actions, footer, form, header, messages _list_* : footer, header, messages, td_actions, t(d|h)_stacked, t(d|h)_tabular _filters, editSuccess, listSuccess Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 19.
    Configurabilité # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator param: model_class: Post list: display: [=title, author, created_on] filters: [title, author, published_on] Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 20.
    Démonstration Forum PHP -Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 21.
    Les Formulaires • Peu de valeur ajoutée du développeur… • ... mais sujet complexe – Validation – Affichage – Sérialisation en base de données – Séparation entre les 3 couches MVC Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 22.
    Les Formulaires danssymfony 1.1 • 3 niveaux – sfValidator : gestion de la validation – sfWidget : gestion des widgets HTML – sfForm : gestion du cycle de vie d’un formulaire Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 23.
    sfFormPropel •Formulaire générées pour les objets Propel • Entièrement personnalisables • Introspection du schéma : – Converti le type Propel/Creole en validateurs et widgets symfony – Clés étrangères – Relations n / n – Gestion des tables d’internationalisation Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 24.
    sfFormPropel classbookActions extends sfActions { public function executeEdit($request) { $this->book = BookPeer::retrieveByPk($request->getParameter('id')); $this->form = new AuthorForm($this->book); if ($request->isMethod('post')) { $this->form->bind($request->getParameter('book'); if ($this->form->isValid()) { $book = $this->form->save(); $this->redirect('@book?id='.$book->getId()); } } } } Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 25.
    Personnaliser les FormsPropel class BookForm extends BaseBookForm { public function configure() { $this->embedI18n(array('en', 'fr')); $this->widgetSchema['en']->setLabel('en', 'English'); unset($this['created_at']); $this->validatorSchema['foo'] = new sfValidatorPass(); $this->widgetSchema['foo'] = new sfWidgetIdentity(); $this->setDefault('published_on', time()); } } Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 26.
    Un Framework pourles Professionnels • Issue de l’expérience • 1.0 stable, maintenue et support commercial • Communauté large et compétente • Extensibilité • Stabilité de l’API • Documentation Une vision du Web Professionnelle Pragmatique Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 27.
    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 – 300 000 visiteurs par mois Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 28.
    Next symfony Workshops En français : Paris, France - Dec 05, 2007 In English : Paris, France - Feb 13, 2008 Plus d’informations sur www.sensiolabs.com Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 29.
    Rejoignez-nous •Sensio Labs recrute en France – 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. Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com
  • 30.
    Sensio S.A. 26, rue Salomon de Rothschild 92 286 Suresnes cedex France Tél. : +33 1 40 99 80 80 Fax : +33 1 40 99 83 34 Contact Fabien Potencier [email protected] http://www.sensiolabs.com/ http://www.symfony-project.com/ Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com