8791 sujets

Développement web côté serveur, CMS

Bonjours,

je me pose des questions concernant la structure du code de mon site. Actuellement dans chaque page, genre faq.php, home.php, inventory.php etc, j'ai mi ca en début de page:


if(isset($_GET['do'])) {
 $do = explode(':',$_GET['do']);
 switch ($do[0]) {
 case 'list_faq': list_faq(); break;
 case 'view_faq': view_faq($do[1]); break;
 case 'edit_faq': edit_faq($do[1]); break;
 case 'add_faq': add_faq(); break;
 }
}


Ca c'est l'exemple de faq

Donc je pense que vous connaissez le principe, si ?do=machin on redirige vers la fonction machin, c'est le meme genre au début des 3 quart des pages.

Donc moi j'ai peur d'avoir fait une connerie en faisant ca, vous allez me dire si c'est vrai.

Moi ce que j'aurai fais c'est de mettre tous les switch des autres pages :


if(isset($_GET['do'])) {
 $do = explode(':',$_GET['do']);
 switch ($do[0]) {
 case 'list_faq': list_faq(); break;
 case 'view_faq': view_faq($do[1]); break;
 case 'edit_faq': edit_faq($do[1]); break;
 case 'add_faq': add_faq(); break;
 }
}


et de tous les ressembler dans index.php comme ceci :


if(isset($_GET['do'])) {
 $do = explode(':',$_GET['do']);
 switch ($do[0]) {

//Faq.php
 case 'list_faq': list_faq(); break;
 case 'view_faq': view_faq($do[1]); break;
 case 'edit_faq': edit_faq($do[1]); break;
 case 'add_faq': add_faq(); break;

// Mettre ici les case des autres pages ...
 }
}



Ca éviterai certaines requetes, mais est ce que c'est vraiment valable?

Est ce que les codages habituels font ceci, rediriger les $_GET, vers les fonction approprié et tout ca depuis index.php

Evidement au lieu d'avoir des liens comme ca faq.php?do=machin ou aurait index.php?do=machin

Merci vos réponses.
Modifié par sff (12 May 2008 - 21:47)
Salut,

je ne suis pas certain d'avoir tout compris ... mais je vais essayer tout de même Smiley cligne

Ce qu'on fait souvent en PHP, c'est de centraliser toute la gestion du contenu à afficher dans le fichier index.php, principalement pour avoir un template unique plus facile à maintenir. Ce qui donne, dans le fichier index.php, quelque chose comme ceci :
<div id="content">
  <?php 
    $page = isset($_GET['page']) ? $_GET['page'] : 'index' ;
    switch ($page) {
      case 'faq' :
        include('faq.php');
        break;
      case 'news':
        include('news.php');
        break;
      case 'index':
      default:
         include('index.php');
     }
  ?>
Ensuite, les actions à gérer en fonction du second paramètre $_GET['do'] peuvent sans problème être déclenchés dans chacun des fichiers concernés ... ce qui est sans doute plus clair et "plus maintenable" qu'un immense switch dans index.php ...
Dans ton cas les liens serait de ce type? index.php?page=news&do=edit (par exemple)
Parceque actuellement moi mes liens sont plutot ce de genre : news.php?do=edit

La le index.php, ne rentre pas en jeu.

Faut t'il que ca soit le cas?
Re.

a écrit :
Faut t'il que ca soit le cas?
Ce n'est pas indispensable, non. Comme je l'ai dit, ça permet simplement de ne pas avoir à gérer le layout global de tes pages sur plusieurs fichiers différents.
a écrit :
Parceque actuellement moi mes liens sont plutot ce de genre : news.php?do=edit


ça reponds a ta question premiere non? du coup les tests ne devraient pas être dans index.php.

Encore que tu pourrais mettre tes switch dans un fichier a "includé" genre
include ("fichier_switch.php"); que tu inclus dans chaque fichier.

maintenant ça fait un peu fouilli et puis et si deux fichiers appelent une action s'appelant pareil pour lancer une fonction dont le comportement est différent? une tres simple expression du polymorphisme. ton affaire se complexifie. de plus si un fichier recoit une action non prevu pour celui-ci tu risques d'avoir une action quand même. ça gene le debug. ça gene la gestion des droits.

bon je dis pas impossible a gérer. mais j'ai l'impression que tu veux trop compresser.

et puis pareil je dirais bien sûr on peut s'imposer la contrainte un seul parametre mais pourquoi pas 2 ou plus? c'est un peu comme si tu t'inderdisais d'utiliser des procedures pour ne coder que des fonctions. possibles mais contraignant.
Modifié par CPascal (13 May 2008 - 21:33)
Le fonctionnement actuel a ses avantages comme ses inconvénients

La si je prends l'exemple de faq.php, tous les switch concernant ce fichier, sont au début. Donc pour s'y retrouver c'est facilement, au lieu de par exemple chercher case 'list_faq': list_faq(); break; parmis une centaine de ligne d'un switch dans index.php

De meme les requetes sont optimité, en début de page, je selectionne uniquement les champs dont j'ai besoin dans les requetes, qui serviront uniquement pour faq.php.

Si je l'avais fais pour index, j'aurai forcement eu 1 seul requete unique qui servirait pour tout le switch de index, au lieu d'avoir eu dans chaque début de page comme pour faq.php, mais par contre je devrais mettre un * pour selectionner tous les champs.

Donc voila je sais toujours pas quoi faire? Faut t'il choisir pour une concentration dans un unique switch pour index.php, et avoir une requete, ou faut 'il rester dans le principe actuel, c'est a dire que chaque page soit autonome, avec ses propres requetes, et son propre switch.

Dans le premier cas, on va forcement supprimer pleins de lignes dans le script.