symfony - php quebecconf.phpquebec.com/slides/2007/symfony-phpquebec-2007-fr.pdfphp quebec 2007...

31
PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com symfony Simplifier vos développement Web professionnels avec PHP Fabien Potencier http://www.symfony-project.com/ http://www.sensio.com/

Upload: others

Post on 15-Feb-2020

26 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

symfonySimplifier vos développement Web

professionnels avec PHP

Fabien Potencierhttp://www.symfony-project.com/

http://www.sensio.com/

Page 2: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Sensio• Agence Interactive française créée en 1998

– Groupe de 150 personnes– 30 personnes dédiées au nouvelles technologies

Webmarketing

Technologies Open Source

(Framework PHP)

TechnologiesInternet

SENSIOAgence Interactive

Page 3: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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– Assistance à maîtrise d’ouvrage– Audit / Formation– Développement Internet/Intranet

CréateurFramework PHP

symfony

Page 4: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

symfony• Framework Web PHP 5• Basé sur 9 ans d’expérience Sensio• Basé sur des projets existants (Mojavi, Propel, Prado)

• Open-Source• Conçu pour gérer :

– Des sites professionnels– Des problématiques complexes– Dans des environnements exigeants

LicenceMIT

Rapprocherle monde de l’Entreprise

et le monde de l’Open-Source

Page 5: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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 desenvironnements

• Sécurité (protection XSS par défaut)• Extensibilité (système de plugins) simplifier

la vie

Page 6: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Développer plus vite• Une ligne de code a un coût

– Pour l’écrire– Pour la tester– Pour la maintenir

• Ecrire moins de code– Architecture : contrôleur, ORM, …– Fichiers de configuration– Autoloading– Générateurs– Helpers

• Plus de temps pour les règles métiers, cas limites, …

moins de code

moins de complexité

moins de bugs

gain de productivité

gain de temps

Page 7: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

symfony, un Framework Web

Lisibilité

Maintenabilité

Evolutivité

Pérennité

Architecture MVCStandardisation

Tests unitaires et fonctionnelsDocumentation API

Orienté ObjetsPlugins

Page 8: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Les Atouts Fonctionnels• Documentation• Configurabilité• Protection XSS• Aide debugging• Tests fonctionnels• Extensibilité : Plugins• Admin Generator• ORM : Propel ou Doctrine• i18n / l10n• 1.0 maintenue sur le long terme

Les StandardsPHP 5MVC

RoutingCache

Page 9: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Installation symfony• Installation PEAR $ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-1.0.0

• Installation SVN / symlink $ svn propedit svn:externals symfony http://svn.symfony-project.com/branches/1.0

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

PEAR packageInstallation Subversion

Package TéléchargeableSandbox

facile

rapide

recommandé

Page 10: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Création d’une Application$ mkdir ~/sfdemo$ cd ~/sfdemo

$ symfony init-project sfdemo$ ./symfony init-app frontend

Projet

Application(s)

Module(s)

Action(s)Composant(s)

Template

Page 11: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Base de données• Configuration de la base de données # config/databases.yml

prod: propel: param: password: PAssWD all: propel: class: sfPropelDatabase param: dsn: mysql://root:@localhost/blog

• Définition du schéma # 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: ~

Gestiondes environnements

Abstraction SQL

Page 12: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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

$ ./symfony propel-build-all-load

1) Crée les classes du modèle2) Converti le schéma en SQL3) Crée les tables4) Charge les données de test

Page 13: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Le Modèle// lib/model/Author.phpclass Author extends BaseAuthor{ function getFullName() { return $this->getFirstName().' '.$this->getLastName(); }}

$author = new Author();$author->setFirstName('Fabien');$author->setLastName('Potencier');$author->save();

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

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

ORMObject Relationship Mapping

Propel / Doctrine

Page 14: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Création du Back-Office• Création automatique d’une Console

d’Administration de Production– Listes– Pagination– Tri

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

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

Code généré MVCet personnalisable

Fichier configurationContrôleurTemplates

– Filtres– Validation– CRUD

Page 15: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Admin Generator• Liste

Page 16: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Admin Generator• Edition

__toString()

widgets m2m relationship

Page 17: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Extensibilité• Extension du module class postActions extends autoPostActions { protected function addFilterCriteria($c) { $c->add(PostPeer::IS_PUBLISHED, true); parent::addFilterCriteria($c); } }

• Personnalisation des templates

Generatedmodule

_edit_* : actions, footer, form, header, messages_list_* : footer, header, messages, td_actions, t(d|h)_stacked, t(d|h)_tabular_filters, editSuccess, listSuccess

Page 18: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Configurabilité• Au niveau des modules # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator param: model_class: Post list: display: [=title, author, created_on] filters: [title, author, published_on]

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

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

Configuration en cascadeFramework

ProjetApplication

Module

LOC : 0

Page 19: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Création du Front-Office• Routing bidirectionnel

<?php echo link_to( $post->getTitle(), '@post?id=’.$post->getId()) ?>

post: param: { module: blog, action: show } requirements:

year: \d+ url: /blog/:id.html

<?php echo url_for('@homepage') ?>homepage:

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

/blog/1.html

/

homepage:

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

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

/

/recent

Page 20: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Tests Fonctionnels• Scénario de navigation // test/functional/frontend/postActionsTest.php $browser = new sfTestBrowser(); $browser->initialize(); $browser-> get('/')-> isStatusCode(200)-> checkResponseElement('h1.title', '/PHP Québec/');

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

TDDTest Driven Development

CSS Selector

Page 21: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Notre première ligne de code# apps/frontend/modules/post/actions/actions.class.phpclass postActions extends sfActions{ function executeShow() { $id = $this->getRequestParameter('id'); $this->post = PostPeer::retrieveByPk($id); $this->forward404Unless($this->post); }}

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

MVCModèle / Vue / Contrôleur

XSSSécurité par défautraccourci

Page 22: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Outils pour débugger• Web Debug Toolbar

Page 23: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Outils pour débugger• Messages d’erreurs

Page 24: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Déploiement$ ./symfony test-allfunctional/frontend/postActionsTest......................okAll 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

$ ./symfony freeze

Page 25: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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

Page 26: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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çaisPolski, Russian, 日本語, Italiano, …

Page 27: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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 WebProfessionnelle

Pragmatique

Page 28: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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– Développeurs dans 80 pays– 100 000 visiteurs par mois

MatureReconnu

Page 29: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

De Belles Références• Yahoo! (USA)

– Yahoo! Bookmarks– 20 millions d’utilisateurs– Web 2.0 / AJAX

Page 30: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] 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 ensymfony. Vous développez en PHP5 objets, vousconnaissez l’AJAX.

– Chef de Projet : Vous êtes développeur et voussouhaitez gérer des projets pour des grands comptes.

Page 31: symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-fr.pdfPHP Quebec 2007 fabien.potencier@sensio.com symfony •Framework Web PHP 5 •Basé sur 9 ans d’expérience

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

SENSIO S.A.26, rue Salomon de Rothschild

92 286 SURESNES cedexFRANCE

Tél. : +33 1 40 99 80 80Fax : +33 1 40 99 83 34

ContactFabien Potencier

[email protected]

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