CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Conseil MVC : conception

bob63
bob63
Niveau 11
15 juillet 2012 à 09:56:14

Bonjour,

Suite à une ancienne discussion, je suis en train de créer un nouveau site en utilisant MVC en PHP.

Jusqu'alors je m'interrogeais s'il valait mieux choisir un framework ou alors un MVC maison. Je pars finalement sur un MVC maison.

J'étais partis sur l'idée que index.php serait le contrôleur.
J'ai un fichier de config.php qui contient un tableau avec les class, vues, modeles, fonctions, ... à afficher du style
$Config['actions'] = array('action_connexion'=>'modeles/connexion.php')
;

Ainsi dans mon contrôleur je fais des conditions sur l'action dans l'url ($_GET['action']) et je fais des conditions
if($_GET['action'] = "connexion")
include $Config['actions']['action_connexion'];
par exemple et j'inclu ensuite la vue adéquate.

Cependant, mon site comportera des centaines d'actions et je me vois pas écrire 100 else if dedans ...

Finalement j'ai cru lire sur certains tutos qu'il faut utiliser une classe contrôleur qui pourrait avoir des fonctions getVues(), getModeles(), ... qui renverrait cette infos (récupère aussi dans l'url).

Finalement je m'embrouille, et si on regarde 10 tutos différentes, soit c'est trop simple (genre ce que je faisais actuellement c'est à dire include dans un else if), soit c'est super compliquer et ca devient une usine à gaz.

Finalement, pourriez-vous me donner votre philosophie lorsque vous utiliser le pattern MVC ? Je ne parle pas encore de MVC2 (chaque chose en son temps :hap: ).

Si vous avez un contrôleur appelé par index.php (qui servirait de front contrôleur du coup), etc

Merci d'avance !

deepblue
deepblue
Niveau 16
15 juillet 2012 à 14:12:44

https://git.deblan.org/?p=linux-deblan-stats.git/.git;a=blob;f=libs/class.Controller.php;h=ae2748e670e5d1f2c0590c6081980a60192fc002;hb=HEAD

https://git.deblan.org/?p=linux-deblan-stats.git/.git;a=blob;f=controllers/class.MainController.php;h=8400b3817e5c46ef3d9f0201ada8e0696b342bc9;hb=HEAD

https://git.deblan.org/?p=linux-deblan-stats.git/.git;a=blob;f=controllers/class.PageController.php;h=bf57fea180b5bcbea7aef225ffef7bf69163dd15;hb=HEAD

http://wall.deblan.fr/x11a/texte/0/

bob63
bob63
Niveau 11
15 juillet 2012 à 18:09:47

Merci pour les sources, je vais regarder ca en détails ;)

darkiron_2012
darkiron_2012
Niveau 10
15 juillet 2012 à 20:36:39

un conseile utilise un framework comme symfony 2 tu verras le gain de temps est indéniable.

3615_mylife
3615_mylife
Niveau 10
17 juillet 2012 à 14:04:10

Si tu veux continué sur du homemade (et donc ignorer le post de darkiron_2012) tu peux utilisé de l'URL Rewritting.

-> Les visiteurs ne verront pas les URLS " en dur ".
Par exemple : './index.php?module=news&action=voir&id=14'
mais ils verront './news/12/'
-> Tu peux récupéré l'URL complète utilisée pour arriver sur la page, avec un petit explode() tu peux récupéré chaque paramètre à envoyer à une classe qui se chargera d'appeler le contrôleur et les actions qui y correspondent.

Pour récupéré l'URL tu as deux méthodes.
Soit tu utilises $_SERVER['REQUEST_URI'] soit tu utilises une variable $_GET['url'] crée dans ton Url Rewritting qui englobe tout les paramètres ce qui donnera ça:
index.php?url=news/voir/12/

Si tu veux plus d'infos, envois moi un MP car je passe pas souvent sur ce forum-ci.

Fire_Storm
Fire_Storm
Niveau 10
17 juillet 2012 à 18:17:44

En fait, très grosso modo le fonctionnement de truc comme Symfony (enfin je ne l'utilise pas vraiment mais j'ai pu voir que c'est adopté un peu partout, chacun ayant quand même ses différences).

Tu as ce qu'on peut appeler une application (le site public est une application, le site admin est une application).

Tu as un fichier appelant le contrôleur de cette application. Celle ci appelle un routeur qui lui est chargé de renvoyer sur un bon module en fonction de l'URL (de l'URL rewriting, sauf qu'ici on peut très bien le faire sans htaccess, enfin on aura besoin de lui pour autre chose mais ça n'est pas obligatoirement lui qui va gérer l'url rewriting (d'ailleurs question, pourquoi utiliser un fichier pour ça (XML, Yaml ou autre) au lieu d'un htaccess ? En terme par exemple de performance est ce qu'un htaccess ne se revelerait pas plus rapide ?)).

Exemple;

/news.html -> url, module -> news, action -> index

On a en bref 3 paramètres ici; l'url, le module et l'action.

L'URL je pense que tu as compris, le module bah ici on va se diriger vers le module news et charger son contrôleur. Seulement voilà on peut par exemple liste des news, en ajouter, en supprimer etc ça ce sont les actions (tout ça est représenté sous la forme d'une classe et les actions sont donc des méthodes).

Tout ça ne sert uniquement à charger le bon contrôleur et a exécuter la bonne méthode.

Et c'est dans cette méthode que tu vas charger ton modèle, faire tes vérifications pour finalement envoyer le tout à la vue.

Bon c'est vraiment très synthétisé, tu as pas mal de classes principales qui s'occupent de la vue en elle même, des routes, du contrôleur principal, des applications etc. Donc tu ne verras aucun include ou autre dans tes contrôleurs, tout ça se passe avant (enfin faut bien un autoload pour charger les classes principales hein) mais ce que je veut dire c'est que chacun a son job à faire et que l'un ne va pas empiéter sur le boulot de l'autre, on ne mélange pas tout?

Charpini
Charpini
Niveau 9
17 juillet 2012 à 20:25:32

moi je fais un truc tout simple

http://wall.deblan.fr/x122/php/1/mvc-simple

10 lignes de codes, et ça évite les url moches (ça donne ?news=3 au lieu de ?action=news&id=3 :malade: )

3615_mylife
3615_mylife
Niveau 10
18 juillet 2012 à 17:17:49

@Fire_Storm: En faite c'est exactement comme ça que je fais aussi :noel:

Pour ta question sur le fichier l'utilisation du fichier XML je vais t'expliquer:
En faite dans les règles d'URL Rewritting tu autorises n'importe quel URLs à pointer vers le même fichier, même si celle-ci sont fausses.

Dans la méthode qui va se charger d'appeler le bon contrôleur (on appel ça un dispatcher, j'crois bien) on lance le routeur qui lui va charger chacune des routes du fichier XML dans un tableau en utilisant l'URL comme clé et y inscrire les infos relatives à celle-ci (module, actions, variables).

Après avec une simple condition on cherche si l'URL de la requête ($_SERVER['REQUEST_URI']) correspond à une clé du tableau, si oui on lance le module.

Sinon on retourne une page d'erreur 404. :noel:

De plus pour quelqu'un qui ne s'y connait pas en trop en prog', le XML a l'avantage d'être simple à lire, et donc il ne devra pas toucher au fichier .htaccess parce que ça c'est vraiment dangereux. :noel:
Alors que si il se gourre dans une route sur le fichier XML, la page se charge pas mais il bloquera pas tout les visiteurs parce qu'Apache a pas pu lire le .htaccess.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment