{"id":594,"date":"2009-05-23T07:44:42","date_gmt":"2009-05-23T06:44:42","guid":{"rendered":"http:\/\/flaven.fr\/?p=594"},"modified":"2013-09-27T15:00:06","modified_gmt":"2013-09-27T13:00:06","slug":"framework-php-quel-framework-choisir-entre-codeigniter-cakephp-symphony-zend","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2009\/05\/framework-php-quel-framework-choisir-entre-codeigniter-cakephp-symphony-zend\/","title":{"rendered":"Framework PHP &#8211; Quel framework choisir entre CodeIgniter, CakePHP, Symfony, Zend&#8230;"},"content":{"rendered":"<p><!-- Framewok PHP - Quel framework choisir entre CodeIgniter, CakePHP, Symfony, Zend  --><br \/>\n<!--  Framewok, PHP, MySQL, MVC, CodeIgniter, CakePHP, Symfony, Zend, MySQL   --><br \/>\nSans vouloir se livrer \u00e0 un comparatif effr\u00e9n\u00e9 listant les avantages et les inconv\u00e9nients entre les diff\u00e9rents &#8220;frameworks&#8221; open-source \u00e9crit en PHP. Exercice qui r\u00e9v\u00e8le de la gageure tant le monde des frameworks bouillonne de nouveaut\u00e9s.<!--more--> Chez Hecube, nous pouvons nous pr\u00e9valoir d&#8217;une petite s\u00e9rie d&#8217;essais sur les principaux frameworks : CakePHP, Symfony, Zend et enfin CodeIgniter. Comme l&#8217;image l&#8217;indique en d\u00e9but d&#8217;article, nous ne faisons pas myst\u00e8re de celui que nous avons \u00e9lu, CodeIgniter. Pourquoi ? Le principale argument qui a pouss\u00e9 \u00e0 ce choix est la <b>SIMPLICIT\u00c9<\/b>, d&#8217;installation, d&#8217;utilisation et d&#8217;appropriation !<\/p>\n\t\t\t\t\t<div class=\"textwidget-unique text\">\n\n\t\t\t\t\t        <div class=\"textwidget-photo\">\n\t\t\t\t\t                <a href=\"https:\/\/flaven.fr\/books\/symfony-coffret-de-2-livres-maitrisez-le-developpement-php-avec-le-framework-symfony\/\" class=\"photo\" title=\"Symfony - Coffret de 2 livres : Ma\u00eetrisez le d\u00e9veloppement PHP avec le framework Symfony\"><img loading=\"lazy\" decoding=\"async\" alt=\"Symfony - Coffret de 2 livres : Ma\u00eetrisez le d\u00e9veloppement PHP avec le framework Symfony\" src=\"http:\/\/ecx.images-amazon.com\/images\/I\/51p%2BMnJgGvL._SL160_.jpg\" width=\"133\" height=\"160\"><\/a>\n\t\t\t\t\t            <\/div>\n\t\t\t\t\t\t<div class=\"info half\">\n\t\t\t\t\t\t\t<h2 class=\"product-title\"><a class=\"head\" href=\"https:\/\/flaven.fr\/books\/symfony-coffret-de-2-livres-maitrisez-le-developpement-php-avec-le-framework-symfony\/\" title=\"Symfony - Coffret de 2 livres : Ma\u00eetrisez le d\u00e9veloppement PHP avec le framework Symfony\">Symfony - Coffret de 2 livres : Ma\u00eetrisez le d\u00e9veloppement PHP avec le framework Symfony<\/a><\/h2>\n\t\t\t\t\t\t\t\n\t\t\t\t\t        <p class=\"product-excerpt\"><\/p>\n\t\t\t\t\t\t\t\tGenre(s) : <a href=\"https:\/\/flaven.fr\/book-type\/agile\/\" rel=\"tag\">Agile<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/api\/\" rel=\"tag\">API<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/applications\/\" rel=\"tag\">Applications<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/developpement-open-source\/\" rel=\"tag\">D\u00e9veloppement<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/php\/\" rel=\"tag\">PHP<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/web-agile-ux\/\" rel=\"tag\">Web<\/a>, <a href=\"https:\/\/flaven.fr\/book-type\/web-apps\/\" rel=\"tag\">Web Apps<\/a><br>Auteur(s) : <a href=\"https:\/\/flaven.fr\/book-author\/olivier-heurtel\/\" rel=\"tag\">Olivier Heurtel<\/a>, <a href=\"https:\/\/flaven.fr\/book-author\/thierry-boulanger\/\" rel=\"tag\">Thierry BOULANGER<\/a><br>Edition(s) : <a href=\"https:\/\/flaven.fr\/book-description\/eni\/\" rel=\"tag\">ENI<\/a><br>\n\t\t\t\t\t<div class=\"but-wrap\"><a href=\"http:\/\/www.amazon.fr\/Symfony-Coffret-Ma%C3%AEtrisez-d%C3%A9veloppement-framework\/dp\/2746060116%3FSubscriptionId%3DAKIAJYB2QGGQOTHQLRPA%26tag%3Dhecubenet-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D2746060116\" class=\"button\"><span><i class=\"more\"><\/i>+ d'infos<\/span><\/a><\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\n<p>En effet, les frameworks PHP  qui existent sur le march\u00e9 sont nombreux. Des plus connus CakePHP, Zend, Symfony au dernier-n\u00e9 Yii, le choix est ardu mais la r\u00e9compense est grande quelque soit d&#8217;ailleurs le framework qui sera employ\u00e9 !<\/p>\n<p>Pour appuyer mes dires et illustrer les avantages de s&#8217;appuyer sur un framework, je vous invite \u00e0 d\u00e9couvrir la derni\u00e8re r\u00e9alisation Hecube. Il s&#8217;agit d&#8217;un atelier de cr\u00e9ation et de personnalisation de tee-shirt dont le &#8220;frontend&#8221; est int\u00e9gralement en Flash, adoss\u00e9 \u00e0 CodeIgniter pour la sa partie &#8220;backend&#8221; et &#8220;frontend&#8221;. Pour la construction d&#8217;un site d&#8217;une page blanche, utiliser une framework, c&#8217;est une s\u00fbret\u00e9 et un gain de temps non n\u00e9gligeable. Le premi\u00e8re \u00e9tage de la fus\u00e9e a \u00e9t\u00e9 livr\u00e9e :):) Il est disponible \u00e0 : <a href=\"http:\/\/smartbox.artiz.fr\/\" target=\"_blank\">http:\/\/smartbox.artiz.fr\/<\/a><\/p>\n<h2>Au fait, qu&#8217;est-ce qu&#8217;un framework ?<\/h2>\n<p>La d\u00e9finition de framework disponible ci-dessous est celle donn\u00e9e par le wikipedia. Elle a le m\u00e9rite d&#8217;\u00eatre assez exhaustive. Dans notre cas, on ne s&#8217;int\u00e9resse qu&#8217;aux frameworks destin\u00e9s au Web.<\/p>\n<blockquote><p>Un framework fournit un ensemble de fonctions facilitant la cr\u00e9ation de tout ou d&#8217;une partie d&#8217;un syst\u00e8me logiciel, ainsi qu&#8217;un guide architectural en divisant le domaine vis\u00e9 en modules. Un framework est habituellement impl\u00e9ment\u00e9 \u00e0 l&#8217;aide d&#8217;un langage \u00e0 objets, bien que cela ne soit pas strictement n\u00e9cessaire : un framework objet fournit ainsi un guide architectural en divisant le domaine vis\u00e9 en classes et en d\u00e9finissant les responsabilit\u00e9s de chacune ainsi que les collaborations entre classes. Ces classes peuvent \u00eatre subdivis\u00e9es en classes abstraites.<\/p><\/blockquote>\n<p><a href=\"http:\/\/fr.wikipedia.org\/wiki\/Framework\" target=\"_blank\">http:\/\/fr.wikipedia.org\/wiki\/Framework<\/a><\/p>\n<h2>Ensuite pourquoi un framework en PHP ?<\/h2>\n<p>Evidemment, une fois la d\u00e9finition donn\u00e9e du framework, on n&#8217;a pas dit grand chose de plus !<\/p>\n<h2>Vive le ROI<\/h2>\n<p>Tout d&#8217;abord pourquoi du PHP par rapport \u00e0 d&#8217;autre langages, tout simplement parce que PHP et son acolyte MySQL sont un standard de fait. Standard de fait car l&#8217;adoption par le plus grand nombre ass\u00e8che litt\u00e9ralement la possibilit\u00e9 d&#8217;utiliser tout autre technologie si vous \u00eates guid\u00e9 par une logique mercantile, non on dit ROI (Return On Investment, ), en clair tout sera plus simple et co\u00fbtera moins cher si vous choisissez une technologie populaire et \u00e9prouv\u00e9e. Pour illustrer notre propos, penchez-vous sur les cas d&#8217;\u00e9cole que sont le march\u00e9 de la mesure statistique avec l&#8217;apparition d&#8217;un nouvel entrant du type de Google Analytics, solution qui est en train de r\u00e9duire au silence toutes les autres solutions actuelles du march\u00e9, gratuites ou payantes. Que dire alors du march\u00e9 de la g\u00e9olocalisation toujours avec l&#8217;ogre Google ou celui du t\u00e9l\u00e9phone mobile o\u00f9 pour une fois Apple s&#8217;est montr\u00e9 plus opportuniste.<\/p>\n<p><em>Pour info : on parle, \u00e0 contrario, de standard de march\u00e9. Un bonne illustration c&#8217;est l&#8217;h\u00e9g\u00e9monie Windows sur le march\u00e9 des syst\u00e8mes d&#8217;exploitation des ordinateurs personnels.<br \/>\n<\/em><\/p>\n<h2>PHP ou un autre langage ? Le dilemme du choix pionnier ou conservateur&#8230;<\/h2>\n<p>Certes, il existe toujours le prestige, li\u00e9 \u00e0 une position \u00e9litiste ou marginale, position qui consiste \u00e0 d\u00e9fendre une technologie moribonde ou tellement pointue que vous vous trouvez \u00eatre le seul expert\/prescripteur \u00e0 pouvoir vous d\u00e9brouiller dans cet environnement. Un avantage au moins, les conf\u00e9rences peuvent se faire dans une cabine t\u00e9l\u00e9phonique, pas la peine de louer plus grand. C&#8217;est une strat\u00e9gie os\u00e9e mais qui peu s&#8217;av\u00e9rer payante, pensez au succ\u00e8s de Guido van Rossum  (montreur de python, aujourd&#8217;hui chez Google) ou David Heinemeier Hansson (grand danois de kob\u00e9, geek en chef chez 37signals). Tiens, puisque on \u00e9voque RoR parlons-en&#8230;<\/p>\n<p>Pour certains, un des grands avantages de RoR est d&#8217;avoir susciter l&#8217;apparition des frameworks PHP.  En effet, l&#8217;excellent marketing dont RoR a fait l&#8217;objet, a un temps ringardiser l&#8217;utilisation des autres langages dont PHP. Beaucoup de d\u00e9veloppeurs se demandaient si ils n&#8217;allaient pas franchir la pas et se mettre \u00e0 RoR. On retrouve d&#8217;ailleurs, \u00e0 mon sens, la trace de ce comparatif dans l&#8217;argumentaire commercial de CodeIgniter. Ce dernier reprend, de mani\u00e8re frappante, quasiment point par point les avantages du Ruby On Rails. Les cr\u00e9ateurs de CI se sont livr\u00e9s \u00e0 un vrai &#8220;benchmark&#8221; des qualit\u00e9s de ROR en privil\u00e9giant les notions de MVC, scaffolding, routes, helpers, active record&#8230; Le tout transpos\u00e9 en PHP.<\/p>\n<p>Pour ceux qui viendront du ROR, l&#8217;arborescence m\u00eame de CI vous semblera famili\u00e8re car tout s&#8217;articule autour du mod\u00e8le MVC (Model View Controller). Via les vid\u00e9o, on y retrouve aussi le concept CRUD (Create, Update, Delete) et le scaffolding qui a tant impressionn\u00e9 le populo avec RoR.<\/p>\n<h4>Une des choses de CI que nous avons aim\u00e9&#8230;<\/h4>\n<p>Une chose pratique parmi les nombreux avantages de CI, est la classe &#8220;The Profiler&#8221;. Elle vous permet de pister les erreurs et vous mettre sur la piste de &#8220;bugs&#8221; \u00e9ventuels comme d&#8217;autre sur celles des &#8220;serial-killers&#8221;.<\/p>\n<blockquote><p>The Profiler Class will display benchmark results,<br \/>\n\tqueries you have run, and $_POST data at the bottom of your pages.<br \/>\n\tThis information can be useful during development in order to<br \/>\n\thelp with debugging and optimization.\n<\/p><\/blockquote>\n<p>Extrait de <a href=\"http:\/\/codeigniter.com\/user_guide\/general\/profiling.html\" target=\"_blank\">http:\/\/codeigniter.com\/user_guide\/general\/profiling.html<\/a><\/p>\n<p><strong>Activation du Profiler<\/strong><\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n\r\n\/* To enable the profiler place the following function anywhere\r\nwithin your Controller functions. When enabled a report will be\r\ngenerated and inserted at the bottom of your pages. *\/\r\n\r\n$this-&gt;output-&gt;enable_profiler(TRUE);\r\n\r\n<\/pre>\n<p>Sinon, pour d\u00e9couvrir les autres domaines d&#8217;excellence de CodeIgniter, jetez un oeil sur le guide de l&#8217;utilisateur.<\/p>\n<ul>\n<li>CodeIgniter User Guide\n<p><a href=\"http:\/\/codeigniter.com\/user_guide\/\" target=\"_blank\">http:\/\/codeigniter.com\/user_guide\/<\/a>\n <\/li>\n<\/ul>\n<h2>Vid\u00e9os &#8211; CodeIgniter (CI)<\/h2>\n<p>Vid\u00e9o des cr\u00e9ateurs de CI &#8211; Pr\u00e9sentation CodeIgniter (CI)<br \/>\n<!--YouTube Error: bad URL entered--><\/p>\n<p>Vid\u00e9o des cr\u00e9ateurs de CI &#8211; Cr\u00e9er son blog en 20 minutes avec CodeIgniter Partie 1 <br \/>\n<em>Create Blog in 20 minutes with Codeigniter Part 1<\/em><br \/>\n<!--YouTube Error: bad URL entered--><\/p>\n<p>Derek Allard &#8211; Cr\u00e9er une application en utilisant CodeIgniter Partie 1\/3<br \/>\n<em>Building an application using CodeIgniter part 1\/3<\/em><br \/>\n<!--YouTube Error: bad URL entered--><\/p>\n<p>Derek Allard &#8211; Cr\u00e9er une application en utilisant CodeIgniter Partie 2\/3<br \/>\n<em>Building an application using CodeIgniter part 2\/3<\/em><br \/>\n<!--YouTube Error: bad URL entered--><\/p>\n<p>Derek Allard &#8211; Cr\u00e9er une application en utilisant CodeIgniter Partie 3\/3<br \/>\n<em>Building an application using CodeIgniter part 3\/3<\/em><br \/> <br \/>\n<!--YouTube Error: bad URL entered--><\/p>\n<p>Vous pouvez aussi directement aller sur le site de Derek Allard, qui met  disposition les vid\u00e9os et les sources de ces explications.<\/p>\n<ul>\n<li>Voir plus sur le site de Derek Allard<br \/>\n<a href=\"http:\/\/www.derekallard.com\/\" target=\"_blank\">http:\/\/www.derekallard.com\/<\/a><\/li>\n<li>Les vid\u00e9os sur le site de Derek Allard<br \/>\n<a href=\"http:\/\/video.derekallard.com\/\" target=\"_blank\">http:\/\/video.derekallard.com\/<\/a><\/li>\n<\/ul>\n<h2>Pour aller plus loin avec CodeIgniter (CI)<\/h2>\n<ul>\n<li>En quelques phrases le portrait sans d\u00e9faut de Code Ignitor.<br \/>\n\t\t<a href=\"http:\/\/codeigniter.com\/user_guide\/overview\/at_a_glance.html\" target=\"_blank\">http:\/\/codeigniter.com\/user_guide\/overview\/at_a_glance.html<\/a><\/li>\n<li>Le site officiel<br \/>\n\t\t<a href=\"http:\/\/codeigniter.com\/\" target=\"_blank\">http:\/\/codeigniter.com\/<\/a><\/li>\n<li>Le site des concepteurs de  CodeIgniter<br \/>\n\t\t<a href=\"http:\/\/ellislab.com\/\" target=\"_blank\">http:\/\/ellislab.com\/<\/a><\/li>\n<li>Les vid\u00e9os d&#8217;initiation \u00e0 CI<br \/>\n\t\t<a href=\"http:\/\/codeigniter.com\/tutorials\/\" target=\"_blank\">http:\/\/codeigniter.com\/tutorials\/<\/a><\/li>\n<li>Le guide de l&#8217;utilisateur<br \/>\n\t\t<a href=\"http:\/\/codeigniter.com\/user_guide\/\" target=\"_blank\">http:\/\/codeigniter.com\/user_guide\/<\/a><\/li>\n<\/ul>\n<h2>Quelques exemples \u00e0 suivre ou pas avec CI&#8230;<\/h2>\n<ul>\n<li>Ajax Examples with xajax + CodeIgniter. Il y a notamment un mod\u00e8le de calendrier.<br \/>\n<a href=\"http:\/\/www.alexajax.com\/home\" target=\"_blank\">\thttp:\/\/www.alexajax.com\/home<\/a><\/li>\n<li>CodeIgniter AJAX With jQuery. Un petit article sur l&#8217;usage de jQuery avec CI<br \/>\n\t\t<a href=\"http:\/\/michaelwales.com\/\" target=\"_blank\">http:\/\/michaelwales.com\/<\/a><\/li>\n<li>\n\t\tUne bonne source sur CI. Unobtrusive AJAX with CodeIgniter and Mootools<br \/>\n\t\t\t<a href=\"http:\/\/pr0digy.com\/codeigniter\/unobtrusive-ajax-with-codeigniter-and-mootools\/\" target=\"_blank\">http:\/\/pr0digy.com\/codeigniter\/unobtrusive-ajax-with-codeigniter-and-mootools\/<\/a><\/li>\n<li>\n<p>\t\t\t\tCodeIgniter model productivity methods<br \/>\n\t\t\t\t<a href=\"http:\/\/pr0digy.com\/codeigniter\/model-productivity-methods\/\" target=\"_blank\">http:\/\/pr0digy.com\/codeigniter\/model-productivity-methods\/<\/a><\/li>\n<\/ul>\n<h2>Les autres frameworks<\/h2>\n<ul>\n<li>Yii<br \/>\n\tLe dernier n\u00e9 des framewoks PHP \u00e0 l&#8217;heure o\u00f9 cet article est publi\u00e9.<br \/>\n\t\t<a href=\"http:\/\/www.yiiframework.com\/\" target=\"_blank\">http:\/\/www.yiiframework.com\/<\/a><\/li>\n<li>CakePHP<br \/><a href=\"http:\/\/cakephp.org\/\" target=\"_blank\">http:\/\/cakephp.org\/<\/a><\/li>\n<li>Zend<br \/>C&#8217;est sur ce framework que la solution e-commerce Magento de smile.fr a \u00e9t\u00e9 construite<br \/>\n\t\t<a href=\"http:\/\/zend.com\/\" target=\"_blank\">http:\/\/zend.com\/<\/a><\/li>\n<li>Symfony<br \/> <a href=\"http:\/\/www.symfony-project.org\/\" target=\"_blank\">http:\/\/www.symfony-project.org\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Sans vouloir se livrer \u00e0 un comparatif effr\u00e9n\u00e9 listant les avantages et les inconv\u00e9nients entre les diff\u00e9rents &#8220;frameworks&#8221; open-source \u00e9crit en PHP. Exercice qui r\u00e9v\u00e8le&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2009\/05\/framework-php-quel-framework-choisir-entre-codeigniter-cakephp-symphony-zend\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">Framework PHP &#8211; Quel framework choisir entre CodeIgniter, CakePHP, Symfony, Zend&#8230;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":9554,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Framework PHP : CodeIgniter, CakePHP, Symfony, Zend. Analyse des outils et r\u00e9sultats pour choisir le meilleur framework.","bf_ai_og_title":"Framework PHP : Quel choisir ?","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3444],"tags":[178,179,181,2211,20,182,183],"class_list":["post-594","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-databases","tag-cakephp","tag-codeigniter","tag-mvc","tag-mysql","tag-php","tag-symfony","tag-zend"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-9A","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2009\/05\/using_Code_Ignitor_1_b_3_g_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=594"}],"version-history":[{"count":2,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/594\/revisions"}],"predecessor-version":[{"id":9553,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/594\/revisions\/9553"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/9554"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}