symfony
                    Un Framework Open-Source
                      pour les Professionnels

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



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

                                  SENSIO
                              Agence Interactive



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

                                                Technologies
                                                 Open Source
                                              (Framework PHP)




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




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




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

                                                                                    Créateur
                                                                                 Framework PHP
                                                                                    symfony

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

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


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




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

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


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

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

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

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

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




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


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

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


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

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

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

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

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


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



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


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




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




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

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

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

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



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

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

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

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



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


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

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




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




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

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

  $ ./symfony sync production go


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


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




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

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

                                                Contact
                                           Fabien Potencier
                                     fabien.potencier@sensio.com




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

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

symfony : Un Framework Open-Source pour les Professionnels

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