Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'ai vu pas mal de tutos sur internet, à vrai dire ... à peu près tous les mêmes.
Ma question porte sur la méthodologie du développement entre la partie Formulaire et la partie Modèle. Au départ, j'avais réfléchi sur la façon dont j'allais développer. Évidemment, sans inventer une façon de coder. L'idée était d'avoir un modèle étendu de Zend_Db_Table, et d'y inclure des méthodes telles que create(), etc, assez spécifique. Le modèle aurait eu la tâche de valider toutes les données entrantes, et pour éviter de me répeter dans le code, en utilisant des validateurs Zend, qui auraient alors été enregistrés et disponibles pour le formulaire. Puis, je me suis dit avec réflexion, qu'il vaudrait mieux avoir plutôt des elements formulaires, disponibles dans ce modèle. Aucun des schémas que je dessinais n'aboutissait à une solution qui me convenait. Au final, les tutos et exemples sur le net montre un formulaire qui fait partie du modèle. J'ai envie de dire "on compte sur lui pour ne pas faire de bêtises".
J'ai donc actuellement un formulaire, qui servira à la fois pour créer et pour éditer, lié à une table. Cela bien sûr dans le meilleur du monde. Ce formulaire, il faut valider des champs. Mais je trouve ça dommage que les validateurs utilisant la base de données se lancent malgré que d'autres validateurs ne soient pas validés. Imaginez vérifier si un pseudo est disponible dans une base de données, sans même vérifier si l'utilisateur en a saisi un, sans vérifier que le captcha est bien rempli, bref, ce n'est pas dans ma logique.
J'étends donc isValid() dans lequel je vérifie que tous les validateurs sont ok, puis je valide tout ce qui doit l'être avec la base de données. Donc jusqu'à là, cela vous semble-t-il bon ?
Ensuite, j'ai une méthode create() ou edit() par exemple, qui va faire l'opération, si la validation est passée. Cela était l'idée que isValid() renvoyait false en cas d'échec, alors que l'opération bdd peut émettre une erreur. Seulement, même si le cas rare qu'un autre utilisateur s'enregistre pile poile après la validation du pseudo en base, et son enregistrement, cela est possible. PDO (de Zend_Db) émettra donc effectivement une exception là dessus. Et si, pour une raison ou une autre, et par exemple pour éviter ce problème, et sérializer (transaction serializable) mes transactions, j'en instaure une. Le pont entre isValid() et une autre méthode est assez génante à mes yeux, car cela induit un questionnement de qui lance la transaction (pourquoi serait-ce le controleur ?), et si c'est le modèle, et si isValid() la lance, elle risque de ne pas être fermée par la méthode d'ajout ou d'édition.
Comment faites-vous donc ?
-> Emission d'exception : Dans ce cas là, je considère qu'une exception relevrait d'une erreur très très "c'est pas de bol" de la part de la base de données, ou un problème de conception. Doit-on le prévoir et afficher un message d'erreur spécial, ou laisser le gestionnaire d'erreur Zend afficher l'erreur basique ? Après tout, si l'exception est attrapée par le controleur en cours, que faire ? On ne peut qu'inviter l'utilisateur a réitérer sa demande, et notifier le développeur .... !?
-> Validation : et si la validation se faisait dans la méthode de création et/ou d'édition ? A ce moment il aurait comme valeur de retour false qui indiquerait au controleur que la validation a échoué. Il ne s'agit pas alors de lui renvoyer false parce que la transaction a échoué ...
En sachant que j'ai commencé à développer un projet sur lequel il y aura certainement plusieurs formulaires pour la même table (concrètement : un formulaire de création, un formulaire d'édition, mais aussi un formulaire d'édition de juste quelques champs). Doit-on répéter le formulaire en enregistrant dans une sorte de registre les éléments répétés ? Doit-on donner la possibilité dans le constructeur du formulaire ou par le biais d'une méthode de celui-ci de n'afficher que quelques éléments, et créer des méthodes supplémentaires ? je pense que la deuxième serait meilleur.
Merci par avance, ces questions peuvent paraître futiles pour certains, mais je commence sur Zend, j'apprécie sa façon d'être et je l'ai adopté car j'avais moi-même commencé à développer un framework (sans vraiment le savoir :p) avec la maturité de développement qui me vient. j'essaie donc d'utiliser au maximum ce que le frameworks me donne, et je réfléchis énormément à faire bien les choses, car la plupart des applications que j'ai conçues me paraissent avec le temps mal faites et trop bricolages. C'est donc plus une problématique de méthodologie pour un code sain que pour un code efficace.
Hors ligne