Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2068 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  32  33  34  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1614212
vanadium
N° Atomique : 23
Posté le 23-09-2007 à 12:30:41  profilanswer
 

Reprise du message précédent :
Pourquoi ne pas utiliser un ORM comme PHPDoctrine ?
www.phpdoctrine.net
 
Très simple à utiliser, puissant et surtout très bien documenté :)

mood
Publicité
Posté le 23-09-2007 à 12:30:41  profilanswer
 

n°1614357
skeye
Posté le 24-09-2007 à 09:54:50  profilanswer
 

...ou au moins PDO...:o


---------------
Can't buy what I want because it's free -
n°1614472
vanadium
N° Atomique : 23
Posté le 24-09-2007 à 12:21:06  profilanswer
 

Tout à fait, d'ailleurs PHPDoctrine est basé sur PDO :jap:

n°1614831
nycius
Ich liebe dich !
Posté le 25-09-2007 à 09:57:42  profilanswer
 

vanadium a écrit :

Pourquoi ne pas utiliser un ORM comme PHPDoctrine ?
www.phpdoctrine.net
 
Très simple à utiliser, puissant et surtout très bien documenté :)


 
Tu aurais des exemples concrets ?

n°1615064
nORKy
Grmmph...
Posté le 25-09-2007 à 14:21:19  profilanswer
 

nycius a écrit :


 
Tu aurais des exemples concrets ?


 
Y'en a pleins la doc des exemples

n°1616427
FlorentG
Posté le 28-09-2007 à 09:17:42  profilanswer
 

vanadium a écrit :

Pourquoi ne pas utiliser un ORM comme PHPDoctrine ?
www.phpdoctrine.net
 
Très simple à utiliser, puissant et surtout très bien documenté :)


Tiens ça à l'air marrant ça [:dawak] Ca va dans le sens où tout le monde va, avec une fluent interface et tout

n°1617154
vanadium
N° Atomique : 23
Posté le 30-09-2007 à 19:02:20  profilanswer
 

nycius a écrit :


 
Tu aurais des exemples concrets ?


 

nORKy a écrit :


 
Y'en a pleins la doc des exemples


 
Je lui ais dit pareil dans un topic qu'il avait crée sur le meme sujet  :pfff:

n°1622229
FlorentG
Posté le 11-10-2007 à 12:58:07  profilanswer
 

On n'avait pas parlé i18n et l10n ici ? Un article ultra-intéressant vu sur reddit sur les problèmes associés : A Localization Horror Story: It Could Happen To You
 
Je crois que je vais me tourner vers une solution classe avec constantes, plus des fonctions pour gérer les cas spéciaux.

n°1629700
FlorentG
Posté le 23-10-2007 à 22:00:16  profilanswer
 

Débat du jour : Où foutre la validation des formulaires ? [:dawa]

 

Mes deux hémisphères cérébraux sont en conflit : l'un pense qu'il faut mettre la validation des formulaires dans le model, l'autre pense que ça va dans le controller...

 

Code Igniter permet de mettre un callback dans le controller pour faire de la validation supplémentaire. CakePHP, lui, place tout ça dans le Model.

 


Dans mon framework, c'est pour l'instant assez le bordel. J'ai une vague validation déclarée dans le formulaire lui-même, et après à moi de faire ce que je veux. Pour l'instant, j'ai presque tout fait dans les models.

 

Qu'en pensez-vous ?

Message cité 1 fois
Message édité par FlorentG le 23-10-2007 à 22:00:42
n°1629707
Shinuza
This is unexecpected
Posté le 23-10-2007 à 22:04:54  profilanswer
 

C'est le model qui vérifie la validité des données.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
mood
Publicité
Posté le 23-10-2007 à 22:04:54  profilanswer
 

n°1629708
masklinn
í dag viðrar vel til loftárása
Posté le 23-10-2007 à 22:04:56  profilanswer
 

FlorentG a écrit :

Débat du jour : Où foutre la validation des formulaires ? [:dawa]
 
Mes deux hémisphères cérébraux sont en conflit : l'un pense qu'il faut mettre la validation des formulaires dans le model, l'autre pense que ça va dans le controller...
 
Code Igniter permet de mettre un callback dans le controller pour faire de la validation supplémentaire. CakePHP, lui, place tout ça dans le Model.
 
 
Dans mon framework, c'est pour l'instant assez le bordel. J'ai une vague validation déclarée dans le formulaire lui-même, et après à moi de faire ce que je veux. Pour l'instant, j'ai presque tout fait dans les models.
 
Qu'en pensez-vous ?


Que ça dépend de ce que tu veux faire de tes données de formulaire.
 
Si c'est pour les balancer dans du modèle, genre tu resérialises en DB, conneries du style, alors validation dans le model, si c'est pour gérer ou effectuer des actions, validation dans le controller.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1629709
FlorentG
Posté le 23-10-2007 à 22:05:04  profilanswer
 

Quelques éléments de réfléxion dans Where to put validation in the MVC pattern (en)

n°1629711
FlorentG
Posté le 23-10-2007 à 22:07:19  profilanswer
 

Shinuza a écrit :

C'est le model qui vérifie la validité des données.


Marrant que les devs de code igniter ont tout foutu dans le controller...
 

masklinn a écrit :

Que ça dépend de ce que tu veux faire de tes données de formulaire.


Ca c'est sûr. J'ai parfois de la validation lorsque c'est des paramètres. Genre l'affichage d'un produit correspondant à un id. Je vérifie si l'id est numérique et existe dans le controller. Si c'est pour de l'insertion, c'est dans le modèle.

n°1629715
masklinn
í dag viðrar vel til loftárása
Posté le 23-10-2007 à 22:08:53  profilanswer
 

FlorentG a écrit :

Ca c'est sûr. J'ai parfois de la validation lorsque c'est des paramètres. Genre l'affichage d'un produit correspondant à un id. Je vérifie si l'id est numérique et existe dans le controller.


J'vois pas l'intérêt, tu fais ta requête et tu regardes si t'as reçu un truc oui [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1629716
FlorentG
Posté le 23-10-2007 à 22:09:56  profilanswer
 

masklinn a écrit :

J'vois pas l'intérêt, tu fais ta requête et tu regardes si t'as reçu un truc oui [:pingouino]


C'est pour un message d'erreur un peu plus explicite. Maintenant ça dépend des cas, parfois je balance la requête cash.

n°1629721
Shinuza
This is unexecpected
Posté le 23-10-2007 à 22:15:29  profilanswer
 

FlorentG a écrit :


Marrant que les devs de code igniter ont tout foutu dans le controller...
 

Ils font pas mal de trucs crades, donc je doute qu'on puisse s'appuyer sur leurs choix pour prendre une décision.
 
Quand tu veux insérer une personne dans une base de données, c'est le model que tu intérroges pour vérifier l'existence d'une personne avec le même nom et ou le même email.
 
Donc partant de la, et sans reflexion sur-édulcorée, je le mettrais dans le model.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1629724
FlorentG
Posté le 23-10-2007 à 22:18:05  profilanswer
 

Shinuza a écrit :

Donc partant de la, et sans reflexion sur-édulcorée, je le mettrais dans le model.


C'était pour moi le plus logique. Maintenant en voyant ce qu'ils ont fait dans CI, et étant de nature à tout remettre en question... Je vais partir là-dessus, et améliorer mon API pour la validation de données, et ça roule [:dawak]

n°1629745
Skateinmar​s
Posté le 23-10-2007 à 23:11:51  profilanswer
 

Shinuza a écrit :

Ils font pas mal de trucs crades, donc je doute qu'on puisse s'appuyer sur leurs choix pour prendre une décision.


Ce framework ne t'empeche pas non plus de faire ca dans le modele.


---------------
Feedback HAV
n°1629748
Shinuza
This is unexecpected
Posté le 23-10-2007 à 23:24:42  profilanswer
 

Skateinmars a écrit :


Ce framework ne t'empeche pas non plus de faire ca dans le modele.


J'ai jamais dis le contraire  [:pingouino]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1629761
Skateinmar​s
Posté le 24-10-2007 à 01:36:14  profilanswer
 

Mmh, c'est surtout FlorentG qui disait que "les devs ont tout mis" dans le controlleur, alors qu'on est libre de faire ca dans le modèle.
 
Sinon personellement même si c'est vrai que la conformité des données est définie dans le modèle je trouve pas illogique de traiter les données à passer au modèle par le controlleur et donc à les valider.


---------------
Feedback HAV
n°1629776
FlorentG
Posté le 24-10-2007 à 07:46:09  profilanswer
 

Skateinmars a écrit :

Ce framework ne t'empeche pas non plus de faire ca dans le modele.


Ok, j'ai regardé ça un peu en vitesse, effectivement

n°1629778
skeye
Posté le 24-10-2007 à 08:10:25  profilanswer
 

Perso je considère que la validation fait partie du dialogue entre la vue et le controleur...et qu'il peut y avoir des contraintes de saisie n'ayant rien à voir avec le modèle.

 

Par exemple le format de saisie d'une date, au pif...le modèle n'en a rien à foutre, a priori.
De la même manière on peut avoir des règles de gestion complexes à traiter, du genre une valeur n'est acceptable pour un champ que suivant la valeur d'un autre, etc...tout ça me parait difficilement relever du boulot du modèle.


Message édité par skeye le 24-10-2007 à 08:10:38

---------------
Can't buy what I want because it's free -
n°1629780
FlorentG
Posté le 24-10-2007 à 08:19:15  profilanswer
 

Y'a aussi le cas genre lors de l'inscription sur un site, le champ "mot de passe" et "retapez le mot de passe", est-ce au modèle de vérifier que les deux mots de passes sont les mêmes ?
 
Pour l'instant je teste ça dans le modèle, mais c'est vrai que c'est un peu ambigü...

n°1629786
skeye
Posté le 24-10-2007 à 08:46:14  profilanswer
 

FlorentG a écrit :

Y'a aussi le cas genre lors de l'inscription sur un site, le champ "mot de passe" et "retapez le mot de passe", est-ce au modèle de vérifier que les deux mots de passes sont les mêmes ?
 
Pour l'instant je teste ça dans le modèle, mais c'est vrai que c'est un peu ambigü...


 
Pour moi c'est pas le boulot du modèle, effectivement.
Par exemple si tu décides de ne plus le faire saisir 2 fois mais de le faire saisir en clair, ou que tu décides d'ajouter un captcha, tu vas pas changer ton modèle, non?:o


---------------
Can't buy what I want because it's free -
n°1629787
skeye
Posté le 24-10-2007 à 08:47:01  profilanswer
 

Au mieux le modèle pour fournir des règles sur ce qu'il connait (taille et type des champs dans la base, par exemple, ou paramètres dans les fichiers de conf).


---------------
Can't buy what I want because it's free -
n°1629808
ratibus
Posté le 24-10-2007 à 09:13:53  profilanswer
 

FlorentG a écrit :

Y'a aussi le cas genre lors de l'inscription sur un site, le champ "mot de passe" et "retapez le mot de passe", est-ce au modèle de vérifier que les deux mots de passes sont les mêmes ?
 
Pour l'instant je teste ça dans le modèle, mais c'est vrai que c'est un peu ambigü...


Pour moi ce cas là c'est au controleur de le vérifier. Le modèle il a juste connaissance de la notion du "mot de passe" pas de la notion de la "confirmation du mot de passe".
Le modèle s'en fout du fait que t'ajoutes un champ de confirmation (ou 12 champs de confirmation :D) pour une donnée.

n°1629815
FlorentG
Posté le 24-10-2007 à 09:31:41  profilanswer
 

En résumé, il faut splitter la validation des données. Certaines règles appartiennent au modèle, d'autres au controller. Le problème maintenant est de définir qui valide quoi.
 
On va prendre le cas d'un modèle mysql. Lui ne s'occupera que de valider en vue de son schéma de table : type de champ, longueur, vérification de champs dupliqué. On aura par exemple le code suivant  :

Code :
  1. class modele_user_mysql {
  2.  
  3.  /**
  4.   * Vérification d'un nouvel utilisateur
  5.    */
  6.  public function validationUtilisateur($user)
  7.  {
  8.      if(strlen($user['name']) > 20) {
  9.          $this->setError('Le nom d\'utilisateur ne peut dépasser 20 caractères');
  10.      }
  11.      
  12.      if(strlen($user['pass']) < 6) {
  13.          $this->setError('Le mot de passe doit être supérieur à 6 caractères');
  14.      }
  15.      
  16.      if(mysql_num_rows(mysql_query('SELECT * FROM `users` WHERE `email`=\'' . mysql_real_escape_string($user['email']) . '\'')) > 0) {
  17.          $this->setError('L\'adresse e-mail est déjà utilisée');
  18.      }
  19.      
  20.      // etc.
  21.  }
  22.  
  23. }


 
Maintenant le controller s'occupe de la validation concernant uniquement le formulaire : vérification que deux champs sont égaux (mot de passe), qu'un champ dépendant d'un autre satisfait une condition, etc. Code exemple :

Code :
  1. class controller_user {
  2.    
  3.    public function post($data)
  4.    {
  5.        $this->validation($data);
  6.        $this->modele->validationUtilisateur($data);
  7.        
  8.        // etc...
  9.    }
  10.    
  11.    
  12.    private function validation($data)
  13.    {
  14.        if($data['pass'] !== $data['passConfirm']) {
  15.            $this->setError('Les mots de passes doivent être les mêmes');
  16.        }
  17.    }
  18.    
  19. }

n°1629834
skeye
Posté le 24-10-2007 à 09:53:11  profilanswer
 

FlorentG a écrit :

En résumé, il faut splitter la validation des données.


Pas forcément.
On peut considérer que les règles de validation font partie du modèle, mais que le contrôleur les demande au modèle et fait la validation.
Après tout une règle de validation telle que la taille maximale est une donnée du modèle comme une autre...que le contrôleur doit pouvoir récupérer pour en faire ce dont il a besoin.


Message édité par skeye le 24-10-2007 à 09:55:03

---------------
Can't buy what I want because it's free -
n°1629837
FlorentG
Posté le 24-10-2007 à 09:58:02  profilanswer
 

C'est un peu se que je fais en appellant la méthode validationUtilisateur sur le modèle, on demande au modèle de valider des données.
 
Après on pourrait avoir un objet style "Validator" que le modèle instancierait avec les bons paramètres, et le controller l'utilise pour valider et récupérer certaines règles.
 
On pourrait par exemple avoir une règle style "pas plus de 20 caractères", le controller récupère ça et le transmet à la view, qui elle-même rajoute un 'maxlength="20"' sur le bon input [:dawa]

n°1629852
skeye
Posté le 24-10-2007 à 10:21:04  profilanswer
 

FlorentG a écrit :

Après on pourrait avoir un objet style "Validator" que le modèle instancierait avec les bons paramètres, et le controller l'utilise pour valider et récupérer certaines règles.
 
On pourrait par exemple avoir une règle style "pas plus de 20 caractères", le controller récupère ça et le transmet à la view, qui elle-même rajoute un 'maxlength="20"' sur le bon input [:dawa]


 
Voilà, c'est plutôt ça que je voulais dire.
Des méthodes genre getMonChampTotoValidator(), et le controleur les utilise pour construire un FormValidator...[:dawa]


---------------
Can't buy what I want because it's free -
n°1629868
FlorentG
Posté le 24-10-2007 à 10:32:57  profilanswer
 

Je vais partir dans cette idée, ch'uis en train de faire une classe Validator et tout, ça va rosquer

n°1629872
skeye
Posté le 24-10-2007 à 10:36:19  profilanswer
 

FlorentG a écrit :

Je vais partir dans cette idée, ch'uis en train de faire une classe Validator et tout, ça va rosquer


 
Quand t'as fini je ramasse les copies, j'ai un machin avec 5 pages de formulaires à refaire proprement.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1629875
FlorentG
Posté le 24-10-2007 à 10:39:55  profilanswer
 

C'est closed-source :o Je vendrais ma classe 10€ avec les tests unitaires.
 
 
Sinon je vais aussi rajouter la normalization des données : certains champs doivent être trimmés, on doit y virer les retours chariots, etc.

n°1629879
skeye
Posté le 24-10-2007 à 10:41:31  profilanswer
 

[:dawao]
 
Ca fait des mois que j'ai commencé ces classes dans un coin et que j'ai pas eu le temps de les terminer...[:joce]


---------------
Can't buy what I want because it's free -
n°1629881
FlorentG
Posté le 24-10-2007 à 10:43:25  profilanswer
 

J'avais aussi plein de trucs comme ça en chantier. Mais maintenant que j'ai une dizaine de modèles, avec plein de formulaires partout, le besoin s'en fait ressentir : marre de faire des strlen(trim()) dans tous les sens et de se retapper la même chose à chaque fois.

n°1629958
Shinuza
This is unexecpected
Posté le 24-10-2007 à 11:30:32  profilanswer
 

J'sais pas pourquoi j'suis ici, php c'est laid [:mouais]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1629974
FlorentG
Posté le 24-10-2007 à 11:41:59  profilanswer
 

GTFO :o Ou au moins participe au débat [:dawa]

n°1630220
FlorentG
Posté le 24-10-2007 à 14:52:16  profilanswer
 

Bon, je m'oriente vers une fluent interface, style :

Code :
  1. $validator = new Validator();
  2. $validator
  3.   ->regle('user', 'texte')->min(4)->max(255)->regexp('/^[a-zA-Z0-9]*$/')
  4.   ->regle('pass', 'texte')->min(6)
  5.   ->regle('mail', 'email')->max(255);
 

Je fais tout en TDD, c'est quand-même pratique.


Message édité par FlorentG le 24-10-2007 à 14:52:28
n°1630557
Dj YeLL
$question = $to_be || !$to_be;
Posté le 25-10-2007 à 00:03:12  profilanswer
 


 
Au pif je dirais que chaque méthode retourne l'objet mis à jour


---------------
Gamertag: CoteBlack YeLL
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  32  33  34  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR