Soutenance Vincent Composieux
About Epixelic 10 employees : 3 directors 4 web developers 1 web designer 2 commercials « Communication-pro » CMS Larger projects Other services
Environnement de travail Découverte de Zend Framework Framework jQuery Outils utilisés : SVN, Bug tracking Environnement LAMP
Bug tracking : Flyspray
Projets sur lesquels j’ai travaillé My-Annonce : Basé sur Zend Framework Service de petites annonces Multiplateforme : Auto, Moto, Immobilier … Handeco : Association proposant des services à l’emploi aux personnes victimes d’un handicap Filrouge : Filrouge est une société proposant de la mise en place de publicité sur différents lieux de vente Jobs & Joy : Développement « from scratch » Site d’offres d’emploi en ligne Mise en place d’un système de paiement par PayPal
Introduction aux frameworks PHP 2 principaux frameworks : Zend Framework Symfony Légende des mots-clé  :  symfony      zend framework     code igniter     cake php
Pourquoi ? Zend Framework : Beaucoup de composants Framework officiel de Zend, société éditrice du PHP Symfony : Plus de 1 000 plug-ins développés par la communauté Laisse le choix d’utilisation entre deux ORM Modèle MVC + Abstraction de la base de données Ne pas réinventer la roue
Le modèle MVC
Mapping objet-relationnel Objets Base de données Abstraction de la base de données : Plus de requêtes SQL dans le code Utilisation d’objets DELETE   FROM   user   WHERE   id  = '5'; $user = new User( 5 ); $user->delete();
Mise en place d’un projet <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot &quot;/var/www/monprojet&quot; ServerName monprojet.local ErrorLog &quot;logs/ monprojet.local-error.log&quot; CustomLog &quot;logs/ monprojet.local-access.log&quot; common </VirtualHost> Définition de l’environnement local sous Apache Définition de l’environnement local sous Apache Symfony  :  root@laptop:~/var/www$ symfony generate:project monprojet Zend Framework  : root@laptop:~/var/www$ zf create project
Mise en place d’un projet
Architecture Zend Framework (INI) Symfony (YAML) apps/frontend/ modules/ index/ actions/ actions.class.php templates/ indexSuccess.php contact/ lib/ model/ application/ controllers/ IndexController.php FooController.php models/ views/ scripts/ index/ index.phtml contact/
Configuration Zend Framework (INI) Symfony (YAML) [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH &quot;/../library&quot; bootstrap.path = APPLICATION_PATH &quot;/Bootstrap.php&quot; bootstrap.class = &quot;Bootstrap&quot; appnamespace = &quot;Application&quot; resources.frontController.controllerDirectory = APPLICATION_PATH &quot;/controllers&quot; resources.frontController.params.displayExceptions = 0 resources.view[] = default: http_metas: content-type: text/html metas: title:  Titre de mon projet description:  Description de mon projet keywords:  Mots-clés de mon projet language:  fr robots:  index, follow stylesheets:  [main.css] javascripts:  [jquery-1.4.2.min.js] has_layout:  true layout:  layout class frontendConfiguration extends sfApplicationConfiguration { public function configure() { } } class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); } } Bootstrap ProjectConfiguration
Gestion des droits sous Zend Framework Définition des droits d’accès : $acl = new Zend_Acl(); $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('backend')); $acl->allow('guest', 'index'); $acl->deny('guest', 'backend'); Zend_Registry::set('acl', $acl); class Plugin_Acl extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $acl = Zend_Registry::get('acl'); $auth = Zend_Auth::getInstance(); if(!$auth->hasIdentity()) { $roleName = 'guest'; } else { $roleName = $auth->getIdentity()->role; } $privilegeName = $request->getActionName(); if(!$acl->isAllowed($roleName, null, $privilegeName)){ $request->setControllerName('Error'); $request->setActionName('index'); } } } Création du plug-in de test :
Gestion des droits sous Symfony Définition des droits d’accès pour chaque module : index: is_secure:  on credentials: administrator all: is_secure:  off Plus rapide à écrire Découpage pour chaque module Avantages :
Utilisation des ORM Zend Framework avec son composant Zend_Db Symfony avec Propel ou Doctrine Point important entre deux frameworks Mise en place du modèle de classe avec Zend Framework : class Commande extends Zend_Db_Table_Abstract { protected $_name = 'commande'; protected $_primary = 'id'; } Mise en place du modèle de classes avec Symfony : symfony doctrine:build-model symfony doctrine:build-sql
Utilisation des ORM Utilisation de l’ORM de Zend Framework : $table = new Commande(); $commande = $table->find(5); Utilisation d’un des ORM de Symfony (ici Doctrine) : $commande = Doctrine::getTable('commande')->find(5); $nom = $commande->utilisateur->nom; $commande->delete();
Les plus des frameworks Symfony : Très grande communauté en France et à l’étranger Système de plug-in très bien integré dans le framework (1133 plug-ins à ce jour) Gain de productivité conséquent en terme de temps Zend Framework : Permet également de développeur des plug-ins mais ils ne sont pas répertoriés Petite communauté, partage via des blogs ou services de distribution de code
Conclusion De solides bases pour les deux frameworks Symfony : Flexible et bien structuré Rapidité et gain de productivité Choix de se baser sur des ORM performants Fait pour des projets qui sont amenés à évoluer Zend Framework : Flexible et bonne personnalisation Projets qui ne vont pas avoir d’évolutions majeures dans le futur Futur : Symfony2, Zend Framework2 basés sur PHP 5.3 (namespaces, …) Zend Framework va intégrer Doctrine à sa version 2 Prévus pour fin de l’année 2010

Soutenance Zend Framework vs Symfony

  • 1.
  • 2.
    About Epixelic 10employees : 3 directors 4 web developers 1 web designer 2 commercials « Communication-pro » CMS Larger projects Other services
  • 3.
    Environnement de travailDécouverte de Zend Framework Framework jQuery Outils utilisés : SVN, Bug tracking Environnement LAMP
  • 4.
  • 5.
    Projets sur lesquelsj’ai travaillé My-Annonce : Basé sur Zend Framework Service de petites annonces Multiplateforme : Auto, Moto, Immobilier … Handeco : Association proposant des services à l’emploi aux personnes victimes d’un handicap Filrouge : Filrouge est une société proposant de la mise en place de publicité sur différents lieux de vente Jobs & Joy : Développement « from scratch » Site d’offres d’emploi en ligne Mise en place d’un système de paiement par PayPal
  • 6.
    Introduction aux frameworksPHP 2 principaux frameworks : Zend Framework Symfony Légende des mots-clé : symfony     zend framework    code igniter    cake php
  • 7.
    Pourquoi ? ZendFramework : Beaucoup de composants Framework officiel de Zend, société éditrice du PHP Symfony : Plus de 1 000 plug-ins développés par la communauté Laisse le choix d’utilisation entre deux ORM Modèle MVC + Abstraction de la base de données Ne pas réinventer la roue
  • 8.
  • 9.
    Mapping objet-relationnel ObjetsBase de données Abstraction de la base de données : Plus de requêtes SQL dans le code Utilisation d’objets DELETE FROM user WHERE id = '5'; $user = new User( 5 ); $user->delete();
  • 10.
    Mise en placed’un projet <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot &quot;/var/www/monprojet&quot; ServerName monprojet.local ErrorLog &quot;logs/ monprojet.local-error.log&quot; CustomLog &quot;logs/ monprojet.local-access.log&quot; common </VirtualHost> Définition de l’environnement local sous Apache Définition de l’environnement local sous Apache Symfony : root@laptop:~/var/www$ symfony generate:project monprojet Zend Framework : root@laptop:~/var/www$ zf create project
  • 11.
    Mise en placed’un projet
  • 12.
    Architecture Zend Framework(INI) Symfony (YAML) apps/frontend/ modules/ index/ actions/ actions.class.php templates/ indexSuccess.php contact/ lib/ model/ application/ controllers/ IndexController.php FooController.php models/ views/ scripts/ index/ index.phtml contact/
  • 13.
    Configuration Zend Framework(INI) Symfony (YAML) [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH &quot;/../library&quot; bootstrap.path = APPLICATION_PATH &quot;/Bootstrap.php&quot; bootstrap.class = &quot;Bootstrap&quot; appnamespace = &quot;Application&quot; resources.frontController.controllerDirectory = APPLICATION_PATH &quot;/controllers&quot; resources.frontController.params.displayExceptions = 0 resources.view[] = default: http_metas: content-type: text/html metas: title: Titre de mon projet description: Description de mon projet keywords: Mots-clés de mon projet language: fr robots: index, follow stylesheets: [main.css] javascripts: [jquery-1.4.2.min.js] has_layout: true layout: layout class frontendConfiguration extends sfApplicationConfiguration { public function configure() { } } class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); } } Bootstrap ProjectConfiguration
  • 14.
    Gestion des droitssous Zend Framework Définition des droits d’accès : $acl = new Zend_Acl(); $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('backend')); $acl->allow('guest', 'index'); $acl->deny('guest', 'backend'); Zend_Registry::set('acl', $acl); class Plugin_Acl extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $acl = Zend_Registry::get('acl'); $auth = Zend_Auth::getInstance(); if(!$auth->hasIdentity()) { $roleName = 'guest'; } else { $roleName = $auth->getIdentity()->role; } $privilegeName = $request->getActionName(); if(!$acl->isAllowed($roleName, null, $privilegeName)){ $request->setControllerName('Error'); $request->setActionName('index'); } } } Création du plug-in de test :
  • 15.
    Gestion des droitssous Symfony Définition des droits d’accès pour chaque module : index: is_secure: on credentials: administrator all: is_secure: off Plus rapide à écrire Découpage pour chaque module Avantages :
  • 16.
    Utilisation des ORMZend Framework avec son composant Zend_Db Symfony avec Propel ou Doctrine Point important entre deux frameworks Mise en place du modèle de classe avec Zend Framework : class Commande extends Zend_Db_Table_Abstract { protected $_name = 'commande'; protected $_primary = 'id'; } Mise en place du modèle de classes avec Symfony : symfony doctrine:build-model symfony doctrine:build-sql
  • 17.
    Utilisation des ORMUtilisation de l’ORM de Zend Framework : $table = new Commande(); $commande = $table->find(5); Utilisation d’un des ORM de Symfony (ici Doctrine) : $commande = Doctrine::getTable('commande')->find(5); $nom = $commande->utilisateur->nom; $commande->delete();
  • 18.
    Les plus desframeworks Symfony : Très grande communauté en France et à l’étranger Système de plug-in très bien integré dans le framework (1133 plug-ins à ce jour) Gain de productivité conséquent en terme de temps Zend Framework : Permet également de développeur des plug-ins mais ils ne sont pas répertoriés Petite communauté, partage via des blogs ou services de distribution de code
  • 19.
    Conclusion De solidesbases pour les deux frameworks Symfony : Flexible et bien structuré Rapidité et gain de productivité Choix de se baser sur des ORM performants Fait pour des projets qui sont amenés à évoluer Zend Framework : Flexible et bonne personnalisation Projets qui ne vont pas avoir d’évolutions majeures dans le futur Futur : Symfony2, Zend Framework2 basés sur PHP 5.3 (namespaces, …) Zend Framework va intégrer Doctrine à sa version 2 Prévus pour fin de l’année 2010