symfony
                  Simplifier vos développement Web
                      professionnels avec PHP

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



PHP Quebec 2007      www.symfony-project.com    fabien.potencier@sensio.com   www.sensio.com
Sensio
  • Agence Interactive française créée en 1998
         – Groupe de 150 personnes
         – 30 personnes dédiées au nouvelles technologies

                                                    SENSIO
                                                Agence Interactive




                                                                    Technologies
                                      Webmarketing
                                                                      Internet




                                                                    Technologies
                                                                     Open Source
                                                                  (Framework PHP)




PHP Quebec 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
  • Des clients Grands Comptes et Institutionnels
         –   Conseil en stratégie Internet
                                                                                          Créateur
         –   Assistance à maîtrise d’ouvrage
                                                                                       Framework PHP
         –   Audit / Formation                                                            symfony
         –   Développement Internet/Intranet


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

  •    Basé sur des projets existants (Mojavi, Propel, Prado)
  •    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


PHP Quebec 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
  • 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)                                                      simplifier
                                                                                              la vie


PHP Quebec 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, …
PHP Quebec 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é




PHP Quebec 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Les Atouts Fonctionnels
  •    Documentation
  •    Configurabilité
  •    Protection XSS                                                               Les Standards
                                                                                        PHP 5
  •    Aide debugging                                                                    MVC
  •    Tests fonctionnels                                                              Routing
                                                                                        Cache
  •    Extensibilité : Plugins
  •    Admin Generator
  •    ORM : Propel ou Doctrine
  •    i18n / l10n
  •    1.0 maintenue sur le long terme
PHP Quebec 2007    www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Installation symfony
  • Installation PEAR
       $ pear channel-discover pear.symfony-project.com
       $ pear install symfony/symfony-1.0.0
                                                                                        PEAR package
                                                                                    Installation Subversion
                                                            facile
                                                                                   Package Téléchargeable
  • Installation SVN / symlink                                                              Sandbox
       $ svn propedit svn:externals
       symfony http://svn.symfony-project.com/branches/1.0

                                                                          recommandé
  • Sandbox
       $ curl -O http://www.symfony-project.com/get/sf_sandbox-1.0.0.tgz
       $ tar zxpf sf_sandbox-1.0.0.tgz
                                                                                                  rapide

PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Création d’une Application
  $ mkdir ~/sfdemo
  $ cd ~/sfdemo
                                                                                   Projet
                                                                                    
  $ symfony init-project sfdemo                                                 Application(s)
                                                                                    
  $ ./symfony init-app frontend
                                                                                 Module(s)
                                                                                    
                                                                                  Action(s)
                                                                                Composant(s)
                                                                                      
                                                                                  Template




PHP Quebec 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:   ~
PHP Quebec 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:     PHP Québec                                       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


PHP Quebec 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();
  $author->setFirstName('Fabien');                                                        ORM
  $author->setLastName('Potencier');                                          Object Relationship Mapping
  $author->save();
                                                                                   Propel / Doctrine
  $post = new Post();
  $post->setAuthor($author);
  $post->setPublishedOn('12:00 tomorrow');
  $post->isPublished(true);
  $post->save();

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



PHP Quebec 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


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




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




   __toString()


                                                      widgets                              m2m relationship


PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Extensibilité
  • Extension du module
         class postActions extends autoPostActions
         {
           protected function addFilterCriteria($c)                                               Generated
           {                                                                                       module
             $c->add(PostPeer::IS_PUBLISHED, true);
             parent::addFilterCriteria($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

PHP Quebec 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
                                                           Configuration en cascade
            param:
                                                                 Framework
              model_class: Post
          list:                                                     Projet
            display: [=title, author, created_on]                 Application
            filters: [title, author, published_on]                 Module

  • Au niveau de l’application
         # apps/frontend/config/security.yml
         default:
           is_secure:   on                                                                    LOC : 0
           credentials: admin

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

PHP Quebec 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Création du Front-Office
  • Routing bidirectionnel
                    homepage:
            /         param: { module: blog, action: recent }                 <?php echo url_for('@homepage') ?>
                      url:   /



                    homepage:
             /        param: { module: blog, action: list }
                      url:   /
                    recent:
        /recent       param: { module: blog, action: recent }
                      url:   /recent



                    post:
                                                                              <?php echo link_to(
                      param: { module: blog, action: show }
                                                                                $post->getTitle(),
  /blog/1.html        requirements:
                                                                                '@post?id=’.$post->getId()
                        year: d+
                                                                              ) ?>
                      url:   /blog/:id.html



PHP Quebec 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', '/PHP Québec/');

  $ ./symfony test-functional frontend
                                                                    CSS Selector
  # get /
  ok 1 - status code is 200
  not ok 2 - response selector h1 does not match regex /PHP Québec/
  # Looks like you failed 1 tests of 2
  1..2



PHP Quebec 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
  }    raccourci                                      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>

PHP Quebec 2007      www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Outils pour débugger
  • Web Debug Toolbar




PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Outils pour débugger
  • Messages d’erreurs




PHP Quebec 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]                                                                  $ ./symfony freeze
    host=1.2.3.4
    user=fabien
    dir=/var/www/sfblog
    type=rsync

  $ ./symfony sync production go


PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Plugins issus de la Communauté
  • De nouveaux plugins sont créés chaque semaine
         – Doctrine : Full Doctrine ORM support
         – UJS : Unobtrusive JavaScript
         – PropelActAsNestedSetBehavior : Nested sets for
           Propel
         – SuperCache : HTML pages cache
         – ControlPanel : Web management for symfony projects
         – ErrorLogger : All 404 and 500 logging in a table
         – Guard : Authentication and authorization features
         – Feed2 : Web feeds management
         – PokaYoke : Client side validation
PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com
Et maintenant ?
  • Forge : www.symfony-forge.com
  • Nouvelles fonctionnalités symfony 1.1 :
         –   Plus de points d’extension pour les plugins
         –   Plus de modularité
         –   Intégration Doctrine
         –   Intégration UJS
         –   Nouvelle gestion des formulaires et de la validation
  • Traduction du livre officiel
                                  , Deutsch, Español, Français
                             Polski, Russian,      , Italiano, …


PHP Quebec 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é large et compétente
  •    Extensibilité
  •    Stabilité de l’API
  •    Documentation
                                                                                     Une vision du Web
                                                                                      Professionnelle
                                                                                       Pragmatique


PHP Quebec 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 par mois
PHP Quebec 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




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

PHP Quebec 2007   www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.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.sensio.com/                                    http://www.symfony-project.com/
PHP Quebec 2007     www.symfony-project.com   fabien.potencier@sensio.com   www.sensio.com

symfony: Simplifier vos développement Web professionnels avec PHP (Symfony PHP Quebec 2007)

  • 1.
    symfony Simplifier vos développement Web professionnels avec PHP Fabien Potencier http://www.symfony-project.com/ http://www.sensio.com/ PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 2.
    Sensio •Agence Interactive française créée en 1998 – Groupe de 150 personnes – 30 personnes dédiées au nouvelles technologies SENSIO Agence Interactive Technologies Webmarketing Internet Technologies Open Source (Framework PHP) PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 3.
    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 • Des clients Grands Comptes et Institutionnels – Conseil en stratégie Internet Créateur – Assistance à maîtrise d’ouvrage Framework PHP – Audit / Formation symfony – Développement Internet/Intranet PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 4.
    symfony • Framework Web PHP 5 Licence • Basé sur 9 ans d’expérience Sensio MIT • Basé sur des projets existants (Mojavi, Propel, Prado) • 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 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 5.
    Ne pas réinventerla roue • Architecture MVC : Modèle / Vue / Contrôleur • 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) simplifier la vie PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 6.
    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, … PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 7.
    symfony, un FrameworkWeb Architecture MVC Lisibilité Standardisation  Maintenabilité Tests unitaires et fonctionnels Documentation API  Evolutivité Orienté Objets Plugins  Pérennité PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 8.
    Les Atouts Fonctionnels • Documentation • Configurabilité • Protection XSS Les Standards PHP 5 • Aide debugging MVC • Tests fonctionnels Routing Cache • Extensibilité : Plugins • Admin Generator • ORM : Propel ou Doctrine • i18n / l10n • 1.0 maintenue sur le long terme PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 9.
    Installation symfony • Installation PEAR $ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-1.0.0 PEAR package Installation Subversion facile Package Téléchargeable • Installation SVN / symlink Sandbox $ svn propedit svn:externals symfony http://svn.symfony-project.com/branches/1.0 recommandé • Sandbox $ curl -O http://www.symfony-project.com/get/sf_sandbox-1.0.0.tgz $ tar zxpf sf_sandbox-1.0.0.tgz rapide PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 10.
    Création d’une Application $ mkdir ~/sfdemo $ cd ~/sfdemo Projet  $ symfony init-project sfdemo Application(s)  $ ./symfony init-app frontend Module(s)  Action(s) Composant(s)  Template PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 11.
    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: ~ PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 12.
    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: PHP Québec 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 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 13.
    Le Modèle // lib/model/Author.php class Author extends BaseAuthor { function getFullName() { return $this->getFirstName().' '.$this->getLastName(); } } $author = new Author(); $author->setFirstName('Fabien'); ORM $author->setLastName('Potencier'); Object Relationship Mapping $author->save(); Propel / Doctrine $post = new Post(); $post->setAuthor($author); $post->setPublishedOn('12:00 tomorrow'); $post->isPublished(true); $post->save(); $posts = PostPeer::doSelect(new Criteria()); PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 14.
    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 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 15.
    Admin Generator • Liste PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 16.
    Admin Generator • Edition __toString() widgets m2m relationship PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 17.
    Extensibilité •Extension du module class postActions extends autoPostActions { protected function addFilterCriteria($c) Generated { module $c->add(PostPeer::IS_PUBLISHED, true); parent::addFilterCriteria($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 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 18.
    Configurabilité •Au niveau des modules # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator Configuration en cascade param: Framework model_class: Post list: Projet display: [=title, author, created_on] Application filters: [title, author, published_on] Module • Au niveau de l’application # apps/frontend/config/security.yml default: is_secure: on LOC : 0 credentials: admin $ ./symfony plugin-install http://plugins.symfony-project.com/sfGuardPlugin PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 19.
    Création du Front-Office • Routing bidirectionnel homepage: / param: { module: blog, action: recent } <?php echo url_for('@homepage') ?> url: / homepage: / param: { module: blog, action: list } url: / recent: /recent param: { module: blog, action: recent } url: /recent post: <?php echo link_to( param: { module: blog, action: show } $post->getTitle(), /blog/1.html requirements: '@post?id=’.$post->getId() year: d+ ) ?> url: /blog/:id.html PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 20.
    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', '/PHP Québec/'); $ ./symfony test-functional frontend CSS Selector # get / ok 1 - status code is 200 not ok 2 - response selector h1 does not match regex /PHP Québec/ # Looks like you failed 1 tests of 2 1..2 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 21.
    Notre première lignede 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 } raccourci 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> PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 22.
    Outils pour débugger • Web Debug Toolbar PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 23.
    Outils pour débugger • Messages d’erreurs PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 24.
    Déploiement $./symfony test-all functional/frontend/postActionsTest......................ok All tests successful. Files=1, Tests=2 # config/properties.ini [production] $ ./symfony freeze host=1.2.3.4 user=fabien dir=/var/www/sfblog type=rsync $ ./symfony sync production go PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 25.
    Plugins issus dela Communauté • De nouveaux plugins sont créés chaque semaine – Doctrine : Full Doctrine ORM support – UJS : Unobtrusive JavaScript – PropelActAsNestedSetBehavior : Nested sets for Propel – SuperCache : HTML pages cache – ControlPanel : Web management for symfony projects – ErrorLogger : All 404 and 500 logging in a table – Guard : Authentication and authorization features – Feed2 : Web feeds management – PokaYoke : Client side validation PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 26.
    Et maintenant ? • Forge : www.symfony-forge.com • Nouvelles fonctionnalités symfony 1.1 : – Plus de points d’extension pour les plugins – Plus de modularité – Intégration Doctrine – Intégration UJS – Nouvelle gestion des formulaires et de la validation • Traduction du livre officiel , Deutsch, Español, Français Polski, Russian, , Italiano, … PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 27.
    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 PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 28.
    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 par mois PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 29.
    De Belles Références • Yahoo! (USA) – Yahoo! Bookmarks – 20 millions d’utilisateurs – Web 2.0 / AJAX PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 30.
    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. PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  • 31.
    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.sensio.com/ http://www.symfony-project.com/ PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com