symfony : Un Framework Open-Source pour les Professionnels

3,160 views

Published on

Published in: Technology, Education

symfony : Un Framework Open-Source pour les Professionnels

  1. 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. 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. 3. Nos clients AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  4. 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. 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. 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. 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. 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. 9. CMS - Content Management System • CMS traditionnel – Fonctionnalités standards – Outil de contribution standard  Le site s’adapte au CMS = • CMS basé sur symfony CMS – Briques logicielles CMS • Editeur rich text, URLs propres, cache, gestion des comptes utilisateurs, plugins…  Le CMS s’adapte au site Efficacité Productivité AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  10. 10. Ne pas réinventer la roue • Architecture MVC : Modèle / Vue / Contrôleur • Normes de développement • Couche d’abstraction Objet-Relationnel • Tests unitaires et fonctionnels • Gestion des déploiements, support des environnements • Sécurité (protection XSS par défaut) • Extensibilité (système de plugins) AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  11. 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. 12. symfony, un Framework Web Architecture MVC Lisibilité Standardisation  Maintenabilité Tests unitaires et fonctionnels Documentation API  Evolutivité Orienté Objets Plugins  Pérennité AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  13. 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. 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. 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. 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. 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. 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. 19. Admin Generator • Liste AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  20. 20. Admin Generator • Edition AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  21. 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. 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. 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. 24. Notre première ligne de code # apps/frontend/modules/post/actions/actions.class.php class postActions extends sfActions { function executeShow() { $id = $this->getRequestParameter('id'); $this->post = PostPeer::retrieveByPk($id); MVC $this->forward404Unless($this->post); Modèle / Vue / Contrôleur } XSS } Sécurité par défaut # apps/frontend/modules/post/templates/showSuccess.php <h1 class="title"><?php echo $post->getTitle() ?></h1> <h2>par <?php echo $post->getAuthor()->getFullName() ?></h2> <p><?php echo $post->getHtmlContent(ESC_RAW) ?></p> AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  25. 25. Outils pour débugger • Web Debug Toolbar AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  26. 26. Outils pour débugger • Messages d’erreurs AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  27. 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. 28. Un Framework pour les Professionnels • Issue de l’expérience • 1.0 stable, maintenue et support commercial • Communauté haut de gamme, support • Extensibilité • Stabilité de l’API • Documentation Une vision du Web Professionnelle Pragmatique AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
  29. 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. 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. 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. 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

×