symfony : Simplifier le développement des interfaces bases de données (PHP Forum 2007)
1. symfony
Simplifier le développement des
interfaces bases de données
Fabien Potencier
http://www.symfony-project.com/
http://www.sensiolabs.com/
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
2. Sensio Labs | Fabien Potencier
• Sensio
Sensio
– Agence Interactive Agence Interactive
– Créée en 1998 Webmarketing
Technologies
Internet
– Groupe de 150 personnes
– 30 personnes dédiées à Internet
• Spécialiste du monde Open-Source Créateur
– Un pôle R&D dédié à l’Open-Source Framework symfony
• Des clients Grands Comptes et Institutionnels
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
3. 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 Licence MIT
– Environnements exigeants
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
4. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
5. Développer plus vite
• Une ligne de code a un coût
moins de code
– Pour l’écrire
– Pour la tester moins de complexité
– Pour la maintenir
moins de bugs
• Ecrire moins de code
gain de productivité
– Architecture : contrôleur, ORM, …
– Fichiers de configuration gain de temps
– Autoloading
– Générateurs
– Helpers
• Plus de temps pour les règles métiers, cas limites, …
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
6. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
7. 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 1.0
– Formations
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
8. Interfaces Bases de Données
• 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
– …
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
9. Pour l’Administrateur
• La ligne de commande
• Interfaces visuelles Desktop ou Web
– phpMyAdmin / MySQL Administrator
– phpPgAdmin / pgAdmin
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
10. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
11. Pour le Client
• Front-Office :
– Interaction en lecture principalement
– Formulaires
• Back-Office
– Listes, filtres, pagination
– CRUD : Create Read Update Delete
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
12. Abstraction SQL
• Creole permet d’abstraire les différences SQL
– Gestion des limit / offset
– Gestion des dates
–…
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
13. Le Modèle (Propel)
// 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('tomorrow 12:00');
$post->isPublished(true);
$post->save();
$posts = PostPeer::doSelect(new Criteria());
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
14. Le Modèle (Doctrine)
// lib/model/doctrine/lib/Author.php
class Author extends BaseAuthor
{
function getFullName()
{
return $this->getFirstName().' '.$this->getLastName();
}
}
$author = new Author();
$author->setFirstName('Fabien');
$author->setLastName('Potencier');
Même mode de fonctionnement que Propel
$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'));
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
15. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
16. Admin Generator
• Liste
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
17. Admin Generator
• Edition
__toString()
widgets m2m relationship
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
18. Extensibilité
• Extension du module
class postActions extends autoPostActions
{
protected function addFiltersCriteria($c) Generated
{ module
$c->add(PostPeer::IS_PUBLISHED, true);
parent::addFiltersCriteria($c);
}
}
• Personnalisation des templates
_edit_* : actions, footer, form, header, messages
_list_* : footer, header, messages, td_actions, t(d|h)_stacked, t(d|h)_tabular
_filters, editSuccess, listSuccess
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
19. 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]
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
20. Démonstration
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
21. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
22. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
23. sfFormPropel
• Formulaire générées pour les objets Propel
• Entièrement personnalisables
• Introspection du schéma :
– Converti le type Propel/Creole en validateurs et
widgets symfony
– Clés étrangères
– Relations n / n
– Gestion des tables d’internationalisation
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
24. sfFormPropel
class 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());
}
}
}
}
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
25. Personnaliser les Forms Propel
class 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());
}
}
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
26. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
27. 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
– 300 000 visiteurs par mois
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
28. 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
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
29. 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.
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com
30. Sensio S.A.
26, rue Salomon de Rothschild
92 286 Suresnes cedex
France
Tél. : +33 1 40 99 80 80
Fax : +33 1 40 99 83 34
Contact
Fabien Potencier
fabien.potencier@sensio.com
http://www.sensiolabs.com/ http://www.symfony-project.com/
Forum PHP - Paris 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensiolabs.com