SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
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

Contenu connexe

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

symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les ProfessionnelsFabien Potencier
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...Fabien Potencier
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
Webinar offre entreprise
Webinar offre entrepriseWebinar offre entreprise
Webinar offre entrepriseMichael Harlaut
 
Deboguer Avec Firephp
Deboguer Avec FirephpDeboguer Avec Firephp
Deboguer Avec FirephpDamien Seguy
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHPJean-Marc Fontaine
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 
PHP dans le cloud
PHP dans le cloudPHP dans le cloud
PHP dans le cloudMicrosoft
 
Lutece, CMS star du J2EE
Lutece, CMS star du J2EELutece, CMS star du J2EE
Lutece, CMS star du J2EELINAGORA
 
Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?Frederic Dewinne
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
AFUP & PHP @ Supelec
AFUP & PHP @ SupelecAFUP & PHP @ Supelec
AFUP & PHP @ Supelecjulien pauli
 
Monitoring d'applications PHP, Salon des solutions Linux Open Source
Monitoring d'applications PHP, Salon des solutions Linux Open SourceMonitoring d'applications PHP, Salon des solutions Linux Open Source
Monitoring d'applications PHP, Salon des solutions Linux Open SourceVanessa55
 
201003 Solutions Linux
201003 Solutions Linux201003 Solutions Linux
201003 Solutions LinuxVanessa55
 
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceMonitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceOxalide
 
201003 Solutions Linux
201003 Solutions Linux201003 Solutions Linux
201003 Solutions LinuxVanessa55
 
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceMonitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceVanessa55
 

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

symfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnelssymfony : Un Framework Open-Source pour les Professionnels
symfony : Un Framework Open-Source pour les Professionnels
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...
 
Presentation symfony
Presentation symfonyPresentation symfony
Presentation symfony
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Webinar offre entreprise
Webinar offre entrepriseWebinar offre entreprise
Webinar offre entreprise
 
Deboguer Avec Firephp
Deboguer Avec FirephpDeboguer Avec Firephp
Deboguer Avec Firephp
 
Déboguer une application web avec FirePHP
Déboguer une application web avec FirePHPDéboguer une application web avec FirePHP
Déboguer une application web avec FirePHP
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 
Php dans le cloud
Php dans le cloudPhp dans le cloud
Php dans le cloud
 
PHP dans le cloud
PHP dans le cloudPHP dans le cloud
PHP dans le cloud
 
Lutece, CMS star du J2EE
Lutece, CMS star du J2EELutece, CMS star du J2EE
Lutece, CMS star du J2EE
 
Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?
 
CV Hazem OUNI
CV Hazem OUNICV Hazem OUNI
CV Hazem OUNI
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
AFUP & PHP @ Supelec
AFUP & PHP @ SupelecAFUP & PHP @ Supelec
AFUP & PHP @ Supelec
 
Monitoring d'applications PHP, Salon des solutions Linux Open Source
Monitoring d'applications PHP, Salon des solutions Linux Open SourceMonitoring d'applications PHP, Salon des solutions Linux Open Source
Monitoring d'applications PHP, Salon des solutions Linux Open Source
 
201003 Solutions Linux
201003 Solutions Linux201003 Solutions Linux
201003 Solutions Linux
 
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceMonitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
 
201003 Solutions Linux
201003 Solutions Linux201003 Solutions Linux
201003 Solutions Linux
 
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open SourceMonitoring Des Applications Php, Salon Des Solutions Linux Open Source
Monitoring Des Applications Php, Salon Des Solutions Linux Open Source
 

Plus de Fabien Potencier

Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Fabien Potencier
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Fabien Potencier
 
Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Fabien Potencier
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010Fabien Potencier
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010Fabien Potencier
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201Fabien Potencier
 
Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Fabien Potencier
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Fabien Potencier
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 WorldFabien Potencier
 
Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Fabien Potencier
 

Plus de Fabien Potencier (20)

Varnish
VarnishVarnish
Varnish
 
Look beyond PHP
Look beyond PHPLook beyond PHP
Look beyond PHP
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
 
Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Caching on the Edge with Symfony2
Caching on the Edge with Symfony2
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
 
News of the Symfony2 World
News of the Symfony2 WorldNews of the Symfony2 World
News of the Symfony2 World
 
Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
PHP 5.3 in practice
PHP 5.3 in practicePHP 5.3 in practice
PHP 5.3 in practice
 

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é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
  • 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 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
  • 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 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
  • 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 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
  • 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 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
  • 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