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