Vous êtes sur la page 1sur 32

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 cre en 1998
Groupe de 150 personnes 30 personnes ddies au nouvelles technologies
SENSIO Agence Interactive

Conseil en stratgie Internet


Webmarketing
Technologies Internet

Dveloppement dapplications interactives valeur ajoute

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 stratgie Internet Assistance matrise douvrage Audit / Formation Dveloppement Internet/Intranet

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Sensio Labs
Spcialiste du monde Open-Source (LAMP)
Linux Apache MySQL / PostgreSQL PHP / Perl / Python / Ruby

Un ple R&D ddi lOpen-Source


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

symfony
Framework Web PHP Licence MIT Bas sur 9 ans dexprience Sensio Bas sur des projets existants Open-Source Rapprocher le monde de lEntreprise Conu pour grer :
Des sites professionnels Des problmatiques complexes Dans des environnements exigeants

et le monde de lOpen-Source

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 hberger

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Framework Web
Cadre de Travail
Composants logiciels gnriques
Prfabriqus Intgrs Rpondent aux problmatiques Web

Professionnalisation des dveloppements


Structuration Standardisation Industrialisation Prennit
www.symfony-project.com fabien.potencier@sensio.com www.sensio.com

AFUP - 06/03/2007

CMS - Content Management System


CMS traditionnel
Fonctionnalits standards Outil de contribution standard Le site sadapte au CMS

CMS bas sur symfony


Briques logicielles CMS

= CMS

Editeur rich text, URLs propres, cache, gestion des comptes utilisateurs, plugins

Le CMS sadapte au site

Efficacit Productivit
www.sensio.com

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

Ne pas rinventer la roue


Architecture MVC : Modle / Vue / Contrleur Normes de dveloppement Couche dabstraction Objet-Relationnel Tests unitaires et fonctionnels Gestion des dploiements, support des environnements Scurit (protection XSS par dfaut) Extensibilit (systme de plugins)
AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com

Dvelopper plus vite


Une ligne de code a un cot
Pour lcrire Pour la tester Pour la maintenir
moins de code moins de complexit moins de bugs gain de productivit gain de temps

Ecrire moins de code


Architecture : contrleur, ORM, Fichiers de configuration Autoloading Gnrateurs Helpers

Plus de temps pour les rgles mtiers, cas limites,


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

symfony, un Framework Web


Lisibilit Maintenabilit Evolutivit Prennit
Architecture MVC Standardisation Tests unitaires et fonctionnels Documentation API Orient Objets Plugins

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Les Atouts Fonctionnels


Documentation Configurabilit Protection XSS Aide debugging Tests fonctionnels Admin Generator ORM : Propel ou Doctrine i18n / l10n Extensibilit : Plugins 1.0 maintenue sur le long terme
www.symfony-project.com fabien.potencier@sensio.com

Les Standards PHP 5 MVC Routing Cache

AFUP - 06/03/2007

www.sensio.com

Cration dune Application


$ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-stable
Installation Subversion Package Tlchargeable

$ mkdir ~/sfdemo $ cd ~/sfdemo


Projet Application(s) Module(s) Action(s) Composant(s) Template

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

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Base de donnes
Configuration de la base de donnes
# config/databases.yml prod: propel: param: password: PAssWD all: propel: class: sfPropelDatabase param: dsn: mysql://root:@localhost/blog

Gestion des environnements

Dfinition du schma
# config/schema.yml post: title: { type: content: { type: is_published: { type: author_id: { type: created_on: ~
AFUP - 06/03/2007

Abstraction SQL

varchar, size: 255 } longvarchar } boolean } integer, foreignTable: author, foreignReference: id }


fabien.potencier@sensio.com www.sensio.com

www.symfony-project.com

Base de donnes
Cration des donnes de tests
# config/fixtures.yml Author: fabien: first_name: Fabien last_name: Potencier Post: first_post: author_id: fabien title: Confrence AFUP $ ./symfony propel-build-all-load

1) Cre les classes du modle 2) Converti le schma en SQL 3) Cre les tables 4) Charge les donnes de test

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Le Modle
// lib/model/Author.php class 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->save(); $posts = PostPeer::doSelect(new Criteria());
AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com

ORM Object Relationship Mapping Propel / Doctrine

Cration du Back-Office
Cration automatique dune Console dAdministration de Production
Listes Pagination Tri Filtres Validation CRUD
Code gnr MVC et personnalisable
Fichier configuration Contrleur Templates

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

1) Cre un module post 2) Gnre 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: Projet display: [=title, author, created_on] Application filters: [title, author, published_on]

Au niveau de lapplication
# apps/frontend/config/security.yml default: is_secure: on credentials: admin

Module

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


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

LOC : 0

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

/blog/2007/03/06/conference-afup.html
# apps/frontend/config/routing.yml post: url: /blog/:year/:month/:day/:slug.html param: { module: blog, action: show } requirements: year: \d{4} month: \d\d day: \d\d
AFUP - 06/03/2007 www.symfony-project.com

# apps/fontend/modules/post/templates/listSuccess.php <?php echo link_to( $post->getTitle(), sprintf('@post?year=%d&month=%d&day=%d&slug=%s', $post->getCreatedOn('Y'), $post->getCreatedOn('m'), $post->getCreatedOn('d'), $post->getSlug() )) ?>
www.sensio.com

fabien.potencier@sensio.com

Tests Fonctionnels
Scnario de navigation
// test/functional/frontend/postActionsTest.php $browser = new sfTestBrowser(); $browser->initialize(); TDD $browser-> Test Driven Development get('/')-> isStatusCode(200)-> checkResponseElement('h1.title', '/Confrence AFUP/'); $ ./symfony test-functional frontend # get / ok 1 - status code is 200 not ok 2 - response selector h1 does not match regex /Confrence 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 premire ligne de code


# apps/frontend/modules/post/actions/actions.class.php class postActions extends sfActions { function executeShow() { $id = $this->getRequestParameter('id'); MVC $this->post = PostPeer::retrieveByPk($id); Modle / Vue / Contrleur $this->forward404Unless($this->post); XSS } Scurit par dfaut } # 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 dbugger


Web Debug Toolbar

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Outils pour dbugger


Messages derreurs

AFUP - 06/03/2007

www.symfony-project.com

fabien.potencier@sensio.com

www.sensio.com

Dploiement
$ ./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 lexprience 1.0 stable, maintenue et support commercial Communaut haut de gamme, support Extensibilit Stabilit de lAPI 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 rfrence (450 pages - GFDL) Tutorial pas pas (250 pages)

Communaut importante
Dveloppeurs dans 80 pays 100 000 visiteurs uniques par mois
AFUP - 06/03/2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com

Mature Reconnu

De Belles Rfrences
Yahoo! (USA)
Yahoo! Bookmarks 20 millions dutilisateurs 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 dveloppeurs Des chefs de projet technique

Le Web est lune de vos passions ?


Dveloppeur : Vous avez une exprience dans le dveloppement de sites Web en PHP voire en symfony. Vous dveloppez en PHP5 objets, vous connaissez lAJAX. Chef de Projet : Vous tes dveloppeur et vous souhaitez grer 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 Tl. : 01 40 99 80 80 Fax : 01 40 99 83 34 Contact Fabien Potencier fabien.potencier@sensio.com

http://www.sensio.com/
AFUP - 06/03/2007 www.symfony-project.com

http://www.symfony-project.com/
fabien.potencier@sensio.com www.sensio.com

Vous aimerez peut-être aussi