C'est vrai que Drupal est un CMS. Mais je l'utilise comme framework PHP (son créateur dit que c'est un RAD).
Les points fort:
- La qualité du code.
- L'excellent système HOOK pour faire des traitements spécifiques.
CakePHP
CodeIgniter
CodeIgniter 2
Fuel PHP
Hoa
Kohana Framework
Prado
Symfony
Symfony2
Yii
Zend Framework
Zend Framework 2
Autre (précisez)
C'est vrai que Drupal est un CMS. Mais je l'utilise comme framework PHP (son créateur dit que c'est un RAD).
Les points fort:
- La qualité du code.
- L'excellent système HOOK pour faire des traitements spécifiques.
Tu rentre doucement dans la logique de l'oeuf et de la poule: il faut bien que quelqu'un fasse du PHP pur au départ
Certes les frameworks ont le vent en poupe car ils permettent de répondre à un besoin immédiat de rentabilité et de performance mais ils ont aussi l'effet pervers d'induire une mauvaise compréhension de la logique fondamentale du langage à force d'abstraire le développeurs des contraintes de sécurité, d’environnement et d'optimisation. C'est pourquoi il est toujours conseillé de passer à un framework une fois avoir fait ses armes avec du PHP pur.
Il n'est jamais inutile de comprendre complétement une technologie, c'est je pense indispensable. Si tu parviens à acquérir une expertise poussée en PHP, tu ne sera jamais obligé de te spécialiser et tu pourra utiliser naturellement n'importe quel framework qui se présente.
Bref, libre à toi de rester conducteur toute ta vie mais si tu sais réparer ta voiture toi même, tu verra que tu économiseras pas mal en frais de garage.
J'ai développé plusieurs projets avec ZF et SF2. Avec le recul, je trouve ces solutions élégantes mais lourdes. Courbe d'apprentissage lente, performances insuffisantes. La souplesse de PHP a été sacrifié avec pas mal d’inconvénients, mais tout de même des avantages : briques réutilisables, maintenabilités.
Ces solutions sont inadaptés autant pour des petits sites que pour des sites à très fort trafic, sauf à faire des choix technologiques très contraignants. Elles copient trop Java, sans assez tenir compte des spécificités de PHP, et à la vue de leur évolution je m'interroge sur la réelle maturité de ces frameworks qui à grand coup de communication bénéficient d'un fort effet de mode.
Pour autant, ZF et SF répondent à pas mal de problématiques, et il est aussi bon que PHP s'oriente dans cette voie. Il y a fort à parier qu'il y aura encore des évolutions importantes parmi les frameworks PHP dans les 5 prochaines années.
Je dirais même que plus que conseillé, c'est indispensable. Particulièrement pour un framework comme ZF qui propose plusieurs approches possibles pour un même problème, étant bien moins structurant que Symfony par exemple. Si on ne sait pas ce que l'on fait avec un framework et pourquoi on le fait, il est très facile d'obtenir un résultat contre-productif et d'annuler ses avantages.
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
@Benjamin : Je pratique le php depuis 2005 il me semble. Donc avant de passé au framework j'ai écrit bien des lignes de codes en php "pur" et je pense aujourd'hui pas trop mal le connaitre. Pour ceux qui ont créé leur propre framework, sachez que je respecte votre travail (même si je le trouve inutile), mais est-il utilisé par beaucoup de monde à part vous ?
Et après ?
- D'une, rien n'est jamais fait inutilement, c'est juste fait: même une erreur peut être enrichissante.
- De deux, le but était de me permettre de travailler plus efficacement: objectif atteint. Si d'autres personnes veulent l'utiliser, libre à elles.
- De trois, tu es qui pour juger ainsi le travail des autres ?
Je comprends tout à fait au vu du choix disponible en la matière qu'on soit peu enclin voire découragé à l'idée de créer un nouveau framework from scratch. J'avais un besoin, je l'ai exprimé, ça fonctionne comme je voulais: problème résolu.
J'ai longtemps utilisé mon framework perso, quelque chose de très basique en MVC avec Symphony. Mais depuis que je travail en équipe que j'ai rejoins alors qu'il travaillaient tous en "php pur" sur chaque projet, il à fallu trouver une solution uniforme. J'ai alors découvert CodeIgniter qui s'est trouvé correspondre à ce que je cherchais à faire avec mon Framework, minimaliste, leger mais complet.
Nous utilisons maintenant une compilation perso de CodeIgniter et de plugins (Smarty, DataMapper ORM...), et j'en suis plutôt satisfait.
Points forts :
- Minimaliste, et donc leger
- Une belle base de plugins
- Séparation du code (Notament avec les models DataMapper ORM)
Points faibles :
- Le système de librairies en singleton me dérange, je préfère généralement utiliser des objets directement (ils ont ou mes new)
- Compatibilité avec les version dépassée de PHP, ça peut être un avantage, mais je préfère les framework qui utilise au maximum les amélioration récentes du language.
Nous développons tout types de sites internet, du site vitrine en allant jusqu'au site de vente en ligne, en passant par les CRM.
Comme premier framework, CodeIgniter semble être un bon choix, il est relativement simple à appréhender, et possède une courbe d’apprentissage plutôt douce.
FuelPhp
Je vient de découvrir ce jeune Framework. Trop jeune pour être utilisé en production à mon goût, mais qui a un très grand potentiel car me semble bien pensé dès le départ. Réalisé par des gars qui s'y connaissent un poil (certains sont d'anciens de CodeIgniter) il est particulièrement véloce et respecte de bonne règles de prog. A tester si vos ne connaissez pas!
http://fuelphp.com/
Des tutos en Francais ici:
http://www.novius-labs.com/quel-fram...uelphp,29.html
Whaaa ils sont chaud les modérateurs ici !!! Qu'est-ce que tu n'as pas compris dans la phrase :
Il me semblait qu'un forum était fait pour discuter, si tu t'emballes comme ca à chaque fois que quelqu'un n'est pas de ton avis, heureusement que tu n'es pas au pouvoir...Envoyé par Anikon
![]()
Au tout début j'ai développé mes propres frameworks ainsi je peux personnaliser à max mes codes et patterns selon mes besoins, en plus c'est plus léger et rapide puisqu'on implémente que ce dont on a besoin réellement.
Ensuite je me suis rendu compte que je réinvente la roue à chaque fois, alors j'ai utilisé en standalone les librairies qui m'intéressent tirés de différents frameworks. Mais quand les projets avancent et prennent du volume ça devient très vite une usine à gaz puisque chaque framework a son propre concept, l'ensemble de l'application devient très hétérogène.
Il y a aussi le fait de travailler en équipe. Il faut adopter une charte de codage collectif. Quand c'est moi qui dirige le projet, je montre à l'équipe comment ça marche mon framework. Il n'y a pas de souci si tout le monde suit mes instructions, mais au cas contraire c'est la galère.
Bref j'ai préféré utiliser des frameworks, et le premier challenge est de choisir lequel utiliser, ce qui dépend de l'envergure du projet et des besoins. En général je n'ai que 3, 4 jours pour faire ce choix et prendre en main le framework choisi.
J'ai alors utilisé Codeigniter, pour les petits projets d'1 ou 2 mois en raison de sa facilité de prise en main mais surtout pour le fait qu'il est très léger et performant. et pour des besoins plus poussés, grands projets qui nécessitent plus d'organisation et fonctionnalités, j'ai préféré utiliser Zend Framework en raison de sa popularité, sa documentation complète, sa modularité, surtout son concept MVC et son orientation objet qui est plus logique pour le développeur.
Sinon pour les sites vitrines simples j'utilise sans plus réfléchir des CMS, car selon mes expériences utiliser Wordpress pour concevoir un site vitrine est 10 fois plus rapide que d'utiliser des frameworks. De même pour les sites qui nécessitent une gestion de contenus plus poussée j'utilise Drupal, et je n'arrive plus à en passer.
Les autres frameworks je n'ai pas essayé, ou bien j'ai essayé mais j'ai constaté que le courbe d'apprentissage est trop long et j'ai abandonné.
Vous savez le cycle de développement actuellement est très court car les clients ont compris qu'il existe déjà des "codes prêts à être utilisé", CMS et frameworks![]()
Par contre tu dis "je respecte" et juste après "je le trouve inutile". Est ce qu'en trouvant le travail de quelqu'un inutile, on peut le respecter ? Je me pose des questions...
Quant à son utilisation, elle est utilisée pour 8 sites.
Je compte le mettre en open source dès que j'aurais traduit toute la documentation (en Anglais) et fait quelques vidéos d'accompagnement, parce que même s'il est plus rapide à prendre en main que la plupart des frameworks ici, il faut tout de même un temps d'adaptation.
Mais donne moi le nom de sites, et de frameworks, s'il te plait, qui peuvent :
- faire le site en multilingue en natif, avec la traduction intégrée pour les traducteurs (pas de chaines à extraire etc) ;
- faire un site multipartenaires (= même traitement des données, mais habillage complètement différent)
- génère un code HTML ultra optimisé, que presque aucun autre site au monde ne génère : regarde le code source de mon site papdevis dans la signature, et donne moi quelques exemples de sites qui génèrent du code aussi optimisé ;
- et malgré l'optimisation à l'extrême (c'est pas pour jouer, ca signifie que mon site vu sur un téléphone portable reste agréable à visiter, pas besoin d'écrire une version spéciale téléphones portables) garde le code source en complet et commenté (= intervention urgente en production possible pour déboguage)
Donc, mon framework permet non seulement de pouvoir, pour une même configuration, gérer un nombre de connexion très largement au dessus que la plupart des "frameworks connus" (ZF m'a faitquand j'ai vu sa lourdeur) mais en plus, si on pense bien le site, on a très peu de choses à ré écrire pour gérer plusieurs partenaires (genre Wordpress Mu).
Pour la note, non seulement le HTML mais aussi le CSS et les images sont optimisées.
Alors si on t'écoute, bah j'aurais énormément gagné de temps en utilisant ZF et en achetant un PC ultra puissant et quatre fois plus de bande passante que nécessaire pour gérer beaucoup de clients. Ah et puis j'aurais du écrire une version téléphones portables. Ah et puis comme il rame trop, j'aurai dû tout réécrire sur ZF2 (sisi regarde la fiche de compatibilité). Ah au final, eh bien ça aurait coûté largement aussi cher. Mais bon, ouf, j'aurais été sauvé, je n'aurais utilisé que un framework connu
Alors que là, bah, regarde, tu as raison : mon travail est totalement inutile : je suis juste à plus de 3000 de réputation sur stackoverflow parce que j'ai appris énormément sur les règles de réécriture, je connais très bien vim, je sais gérer les connexions SSH, donc agir très rapidement en production si nécessaire, je sais quelles sont la plupart des implémentations et failles de sécurité et comment les gérer, j'ai réécrit la gestion des accès en base avec PDO, mais bon, tu as raison : je n'aurais jamais eu à apprendre tout ça si j'avais utilisé ZF2 ou SF2
Un grand merci pour tes conseils, il faut les suivre, et n'oubliez pas : écrire son propre framework, c'est inutile !!!![]()
Juste pour mettre de l'eau au moulin.
Le manifeste "micro PHP" .
Les commentaires sont de qualités, émis par des personnes reconnue du monde PHP.
MaitrePylos
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
Je peux en dire autant de toi: tu critiques toujours ouvertement les projets en inadéquation avec ta propre logique ?
Par ailleurs, ce n'est pas parce que je suis modérateur que je ne peux pas dire ce que je pense. J'ignore la façon dont tu pense que ton propos est perçu mais on se sent insulté en te lisant.
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Un « startup » typique d'une application ZF 1.1x, c'est cela:
Le fichier application.ini qui contient l'essentiel de la configuration de ZF (c'est un extrait, le reste concerne essentiellement des paramètres propres à l'application et pas au framework, et j'ai évidemment camouflé les noms et autres paramètres confidentiels) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), '/usr/local/lib/php/ZendFramework-1.10.8/library', get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Il s'agit d'une application modulaire, utilisant JQuery, comportant un layout, et pour laquelle j'ai écrit des aides de vues (basées sur JQuery) et d'action. Je ne trouve pas ce code particulièrement sophistiqué, en tout cas on est loin du code imbitable sorti de l'imagination de ce blogueur pour justifier de sa répugnance envers les frameworks comme ZF...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.max_execution_time = 600 bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "My" resources.db.adapter = "PDO_PGSQL" resources.db.params.username = "..." resources.db.params.password = "..." resources.db.params.dbname = "..." resources.db.params.host = "..." resources.db.params.charset = "..."; resources.frontController.params.prefixDefaultModule = "0" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" ; Espace de nom pour le chargement automatique des classes "Maison" autoloaderNamespaces[] = "My_" ; Chemins d'accès aux plugins de ressource "Maison" pluginPaths.My_Application_Resource = "My/Application/Resource/" ; Ajout des chemins aux aides de vue "maison" et paramétrage de la vue resources.view[] = "" resources.view.helperPath.My_View_Helper = "My/View/Helper/" resources.view.helperPath.My_JQuery_View_Helper = "My/JQuery/View/Helper/" resources.view.doctype = "XHTML1_TRANSITIONAL" resources.view.encoding = "UTF-8" ; Ajout des chemins aux aides d'action "maison" resources.frontController.actionhelperpaths.My_Action_Helpers = "My/Action/Helpers" ; Paramétrage du plugin JQuery pluginPaths.ZendX_Application_Resource = "ZendX/Application/Resource/" resources.Jquery.stylesheets[] = "" resources.Jquery.localpath = "/xxx/js/jquery-1.4.2.min.js" resources.Jquery.uilocalpath = "/xxx/js/jquery-ui-1.8.4.custom.min.js" resources.Jquery.stylesheets[] = "/xxx/css/ui-lightness/jquery-ui-1.8.4.custom.css"
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
En même temps l'exemple données vient de ZF2
Si je prend juste le fichier de config de module de l'exemple de RobAllen's, et c'est souvent son tuto qui est mis en avant pour les débutant, tu avouras que c'est loin d'être facile à prendre en main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 <?php return array( 'di' => array( 'definition' => array( 'class' => array( 'Zend\Mvc\Router\RouteStack' => array( 'instantiator' => array( 'Zend\Mvc\Router\Http\TreeRouteStack', 'factory' ), ), ), ), 'instance' => array( // Inject the plugin broker for controller plugins into // the action controller for use by all controllers that // extend it. 'Zend\Mvc\Controller\ActionController' => array( 'parameters' => array( 'broker' => 'Zend\Mvc\Controller\PluginBroker', ), ), 'Zend\Mvc\Controller\PluginBroker' => array( 'parameters' => array( 'loader' => 'Zend\Mvc\Controller\PluginLoader', ), ), // Setup the View layer 'Zend\View\Resolver\AggregateResolver' => array( 'injections' => array( 'Zend\View\Resolver\TemplateMapResolver', 'Zend\View\Resolver\TemplatePathStack', ), ), 'Zend\View\Resolver\TemplateMapResolver' => array( 'parameters' => array( 'map' => array( 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', ), ), ), 'Zend\View\Resolver\TemplatePathStack' => array( 'parameters' => array( 'paths' => array( 'application' => __DIR__ . '/../view', ), ), ), 'Zend\View\Renderer\PhpRenderer' => array( 'parameters' => array( 'resolver' => 'Zend\View\Resolver\AggregateResolver', ), ), 'Zend\Mvc\View\DefaultRenderingStrategy' => array( 'parameters' => array( 'layoutTemplate' => 'layout/layout', ), ), 'Zend\Mvc\View\ExceptionStrategy' => array( 'parameters' => array( 'displayExceptions' => true, 'exceptionTemplate' => 'error/index', ), ), 'Zend\Mvc\View\RouteNotFoundStrategy' => array( 'parameters' => array( 'displayNotFoundReason' => true, 'displayExceptions' => true, 'notFoundTemplate' => 'error/404', ), ), // Setup the router and routes 'Zend\Mvc\Router\RouteStack' => array( 'parameters' => array( 'routes' => array( 'default' => array( 'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => array( 'route' => '/[:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( 'controller' => 'Application\Controller\IndexController', 'action' => 'index', ), ), ), 'home' => array( 'type' => 'Zend\Mvc\Router\Http\Literal', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Album\Controller\AlbumController', 'action' => 'index', ), ), ), ), ), ), ), ), );
Maintenant, c'étais juste pour signaler qu'il y avait d'autres solutions que les frameworks FullStack
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Ah. Et pour toi, donc, c'est simple. Ok ok. Je ne suis ni pour ni contre. J'ai juste un point de vue différent. Peut être que des gens trouveraient mon framework lourd aussi : en effet pour écrire une page, il faut écrire la page dans include/page/nomdepage.php, la construire dans web/nomdepage.php, et créer le template "commun" dans templates/common/fr/html/nomdepage.htm. Voire un template partenaire spécialisé dans templates/partenaire/fr/html/nomdepage.htm. Pas si simple. Pour le multilangue ça en rajoute aussi une petite couche. Mais le gain (énorme) de temps ne se voit qu'en maintenance. C'est peut être pareil pour ZF alors...
Si vous vous sentez insulté j'en suis désolé, ça n'a jamais été mon but. Ce que je dis n'engage que moi, c'est un avis personnel !!! Je n'ai jamais dit que mon avis était le seul valable. J'ai moi même bricolé quelques début de framework maison juste histoire de bosser un peu mes bases du MVC, ORM ou des genres de dataGrid etc... mais en production, pour des clients je passe toujours par des frameworks ayant fait leur preuve et qui sont pour moi un gage de qualité et d'évolutivité. Je ne sais pas quels type de dev vous faites ou pour quel genre de clients vous bossé mais bien souvent les clients réclament tel ou tel framework sans même savoir si il est bien pour eux mais du coup on est bien obligé de l'utiliser...
Partager