IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

conseils MVC pour les restrictions sur les requêtes et sur les fonctions outils [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut conseils MVC pour les restrictions sur les requêtes et sur les fonctions outils
    Bonjour,

    Je suis en train de développer un site en MVC et j'ai quelques petites questions sur ce sujet auxquelles les différents tutos que j'ai pu parcourir n'ont pas répondu.

    Sur mon site, j'ai un menu avec des catégories.
    Lorsque je clique sur une catégories, cela m'affiche les membres du site rattachés à cette catégorie.

    Question 1 :
    Les catégories du menus sont stockées en BD, donc il me faut un fichier modèle pour pouvoir les récupérer ! Or comme le menu est partagé par toutes les pages du site, je ne peux pas le rattacher à un contrôleur. Où donc déclarer la fonction qui permet de construire le tableau des catégories en faisant appel au fichier modèle, tableau qui sera ensuite passé à la vue.

    Question 2 :
    Lorsque je clique sur une catégorie, je place le numéro de la catégorie dans une variable de session et ensuite j'affiche la liste des membres triés par leur appartenance à la catégorie choisie. Comment faire pour transmettre la sélection à la requête de mon fichier model ? La question se reposera avec les fonctions de tris d'ailleurs. Existe-t-il une bonne pratique (sans PDO) pour construire automatiquement mes requêtes avec les fonctions, filtres et tris passés en paramètres ? Dois-je transmettre la restriction depuis mon controller via un tableau par exemple ? ou est-ce mieux d'utiliser directement les variables de session dans la fonction du model ?

    Question 3 :
    Avant d'afficher la liste des membres d'une catégorie, je fais un test sur la catégorie pour vérifier si elle existe (elle est passée dans l'url, donc un minimum de contrôle s'impose). Or dans la mesure où j'appelle le controller membres, je suis obligé de faire le contrôle sur la catégorie dans le controller des membres ! N'y a-t-il pas un mélange des genres ? Ne devrais-je pas avoir un controller catégorie dans lequel je fais le check ? Mais dans ce cas, je ne vais rechercher les membres dans le controller categorie ? Le serpent se mord la queue ! Là encore, y a-t-il une bonne pratique ?

    Question 4 (la dernière :-) ):
    Pour toutes mes fonctions outils utilisées un peu partout dans mes controller, j'ai créé une classe utils dans laquelle je déclare des fonctions statiques (par exemple : echapper() qui échappe les caractères spéciaux pour éviter les injections). Ainsi, pour appeler cette fonction, je fais : $post = utils::echapper($_POST).
    Je trouve cela un peu lourd à manipuler. N'y a-t-il là encore pas mieux à faire ?

    Merci de vos éclaircissements et autres conseils !

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Q1 : Fait dériver tes controllers d'un controller de base et implémente toutes les fonctions communes dans ce controller de base :
    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
    class baseController
    {
    	public function __construct();
     
    	public function getCategories()
    	{
    		$categorie = new Categorie();
    		return $categorie->getAll();
    	}
    }
     
    class UnController extends baseController
    {
    	public function __contruct()
    	{
    		parent::__contruct();
    		$this->getCategories();
    	}
    }
    Q2 : Si c'est pour utiliser dans la même requête/page la variable de session ne sert à rien. Suffit de passer le paramètre à la méthode de ton modele. Si tu as plusieurs paramètres un tableau peut être le bienvenue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class UserController extends baseController
    {
    	public function listeUser()
    	{
    		$catId = 10; // récupère ici le paramètre comme tu veux
    		$user = new ModelUser();
    		$user->getByCategorieId($catId);
    	}
    }
    Existe-t-il une bonne pratique (sans PDO)
    hérétique !

    Q3 : Si ta catégorie n'existe pas , il n'ya pas de membre associé donc ta méthode devras te retourner null ou un tableau vide. Donc à priori pas de controle paticulier ici. Après si vraiment tu as un controle à faire sur une valeur instancie l'objet métier correspondant (ou appel une méthode statique) et fait le test avec le modele :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function listeUser()
    	{
    		$catId = 10; // récupère ici le paramètre comme tu veux
    		if(Categorie::isACategorie($catId))
    		{
    			$user = new ModelUser();
    			$user->getByCategorieId($catId);
    		}
    	}
    Q4 : Pas vraiment , les class util plus communément appelé Helper , on peut difficilement y échapper.

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Q1 : ben oui, suis-je bête...
    Q2 : La session est utile, car dans la navigation des différentes pages (membres n'est qu'une parmi d'autres), je dois me rappeler de la catégorie choisie pour afficher les résultats filtrés dans ces différentes pages...
    hérétique => => pas par choix ! par obligation !
    Q3 : une fonction statique... évidemment ! rooooo, pas les noeils en face des trous moi !
    Q4 : je m'en doutais un peu...

    Merci beaucoup pour tes réponses claires !

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Q2 : La session est utile, car dans la navigation des différentes pages
    Quoi qu'il en soit n'utilise pas la session dans ton modele. Tu y créerais une dépendance supplémentaire et rendrait son test (unitaire) compliqué. Passe simplement les données dont tu as besoin via les paramètres des fonctions.

  5. #5
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Ok et donc d'une façon plus générale, tu me conseilles d'utiliser les sessions au niveau des controllers et de ne passer que des données aux models ?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    oui

  7. #7
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/07/2010, 11h53
  2. [AC-2003] Numéroter les doublons dans une requête en utilisant une fonction VBA
    Par maldan dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/09/2009, 17h46
  3. Réponses: 1
    Dernier message: 23/09/2009, 16h38
  4. Compléter les trous d'une requête groupée sur une durée
    Par apoingsfermes dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/01/2007, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo