symfony : simplifier le développement des interfaces bases de données (php forum 2007)

30
Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com symfony Simplifier le développement des interfaces bases de données Fabien Potencier http://www.symfony-project.com/ http://www.sensiolabs.com/

Upload: fabien-potencier

Post on 15-Jan-2015

7.975 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

symfonySimplifier le développement des

interfaces bases de données

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

http://www.sensiolabs.com/

Page 2: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Sensio Labs | Fabien Potencier• Sensio

– Agence Interactive– Créée en 1998– Groupe de 150 personnes– 30 personnes dédiées à Internet

• Spécialiste du monde Open-Source– Un pôle R&D dédié à l’Open-Source

• Des clients Grands Comptes et Institutionnels

Webmarketing TechnologiesInternet

SensioAgence Interactive

CréateurFramework symfony

Page 3: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

symfony• Framework Web PHP 5• Basé sur

– 9 ans d’expérience Sensio– des projets Open-Source existants

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

– Sites professionnels– Problématiques complexes– Environnements exigeants

Licence MIT

Page 4: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Les Buts de symfony• Rapprocher le monde de l’Entreprise

et le monde de l’Open-Source

• Développer plus vite

• Ne pas réinventer la roue

Page 5: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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 6: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Ne pas réinventer la roue• Intégrer les Bonnes Pratiques• Architecture MVC : Modèle / Vue / Contrôleur

• Tests unitaires et fonctionnels

• Gestion des déploiements, support des environnements• Configurabilité• Sécurité (protection XSS et CSRF par défaut)• Extensibilité (système de plugins)• Admin Generator simplifier

la vie

Page 7: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Les Principaux Atouts• symfony, c’est du code efficace

mais c’est également…• Documentation

– Un livre sous licence GFDL (450p)– Le tutorial askeet (250p)

• 1.0 maintainue par Sensio– ~1 mise à jour par mois (bugs)– Support Commercial– Formations

1.0

Page 8: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

• Des besoins différents selon la cible– Pour l’administrateur– Pour le développeur– Pour le client

• Des moteurs différents– MySQL– PostgreSQL– Oracle– MS SQL– DB2– …

Interfaces Bases de Données

Page 9: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Pour l’Administrateur• La ligne de commande• Interfaces visuelles Desktop ou Web

– phpMyAdmin / MySQL Administrator– phpPgAdmin / pgAdmin

Page 10: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Pour le Développeur• Couche d’abstraction Base de données

– Creole– PDO (PHP 5.1)

• ORM Tools (Object Relational Mapping)– Propel– Doctrine

• Générateurs dans symfony

Page 11: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Pour le Client• Front-Office :

– Interaction en lecture principalement– Formulaires

• Back-Office– Listes, filtres, pagination– CRUD : Create Read Update Delete

Page 12: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Abstraction SQL• Creole permet d’abstraire les différences SQL

– Gestion des limit / offset– Gestion des dates– …

Page 13: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Le Modèle (Propel)// 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('tomorrow 12:00');$post->isPublished(true);$post->save();

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

Page 14: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Le Modèle (Doctrine)// lib/model/doctrine/lib/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('tomorrow 12:00');$post->isPublished(true);$post->save();

$posts = Doctrine::getTable('Post')->findAll();

$post = Doctrine::getTable('Post')->find($request->getParameter('id'));

Même mode de fonctionnement que Propel

Page 15: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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 16: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Admin Generator• Liste

Page 17: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Admin Generator• Edition

__toString()

widgets m2m relationship

Page 18: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Extensibilité• Extension du module class postActions extends autoPostActions { protected function addFiltersCriteria($c) { $c->add(PostPeer::IS_PUBLISHED, true); parent::addFiltersCriteria($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 19: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Configurabilité

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

Page 20: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Démonstration

Page 21: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Les Formulaires• Peu de valeur ajoutée du développeur…• ... mais sujet complexe

– Validation– Affichage– Sérialisation en base de données– Séparation entre les 3 couches MVC

Page 22: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Les Formulaires dans symfony 1.1• 3 niveaux

– sfValidator : gestion de la validation– sfWidget : gestion des widgets HTML– sfForm : gestion du cycle de vie d’un formulaire

Page 23: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

sfFormPropel• Formulaire générées pour les objets Propel• Entièrement personnalisables• Introspection du schéma :

– Converti le type Propel/Creole en validateurs etwidgets symfony

– Clés étrangères– Relations n / n– Gestion des tables d’internationalisation

Page 24: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

sfFormPropelclass bookActions extends sfActions{ public function executeEdit($request) { $this->book = BookPeer::retrieveByPk($request->getParameter('id')); $this->form = new AuthorForm($this->book);

if ($request->isMethod('post')) { $this->form->bind($request->getParameter('book'); if ($this->form->isValid()) { $book = $this->form->save();

$this->redirect('@book?id='.$book->getId()); } } }}

Page 25: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Personnaliser les Forms Propelclass BookForm extends BaseBookForm{ public function configure() { $this->embedI18n(array('en', 'fr'));

$this->widgetSchema['en']->setLabel('en', 'English');

unset($this['created_at']);

$this->validatorSchema['foo'] = new sfValidatorPass(); $this->widgetSchema['foo'] = new sfWidgetIdentity();

$this->setDefault('published_on', time()); }}

Page 26: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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 27: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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– 300 000 visiteurs par mois

MatureReconnu

Page 28: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.com

Next symfony Workshops

En français : Paris, France - Dec 05, 2007

In English : Paris, France - Feb 13, 2008

Plus d’informations sur www.sensiolabs.com

Page 29: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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 30: symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)

Forum PHP - Paris 2007 www.symfony-project.com [email protected] www.sensiolabs.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.sensiolabs.com/ http://www.symfony-project.com/