2009-12-17 6 views
0

Dans les deux derniers sites que j'ai créés, j'ai mis en place une sorte de contrôleur de type MVC, je pense.Quelle est la meilleure façon d'implémenter un contrôleur en PHP?

J'ai utilisé mod_rewrite pour tout envoyer via index.php, donc l'URL est devenue une chaîne de requête.

Cela a fonctionné, mais je me demande si c'est un peu hacky, ou simplement la façon acceptée de faire les choses. Y a-t-il un meilleur moyen? Je ne veux pas de cadre, je veux apprendre à le faire moi-même.

Répondre

8

Essayez mon plus petit cadre dans le monde.

<?php 
$g=$_GET;[email protected]$g['c']?$g['c']:'Home'; 
if([email protected]"c/$c.php")die('fail'); 
$m=method_exists($c,[email protected]$g['m'])?$m:'index'; 
$o=new$c();$o->$m($g); 

qui va dans index.php et vos controlls sont blog.php en ./c/Blog.php.

class Blog { 

    function index() 
    { 
     echo "Hello world"; 
    } 

    function otherpage() 
    { 
     echo "ZOMG!"; 
    } 

Fait principalement comme une blague, que je voulais faire un cadre qui pourrait tenir dans un tweet, mais la logique de base est là ;-)

+0

a fait ma journée: D +1 – yoda

+0

C'est vraiment génial :) – Skilldrick

+0

Je prépare toujours un article de blog à ce sujet, mais l'utilisation de base est index.php pour charger Home-> index(), index.php? C = Blog pour charger Blog-> index() et index.php? CBlog & m = otherpage & id = 1 pour charger Blog-> otherpage ($ params) avec $ params ['id'] renvoyant 1. :-) –

1

C'est ainsi que je l'ai accompli. J'ai ensuite créé une table de répartition qui est nouvelle, basée sur l'URL, sur le contrôleur à instancier et sur la distribution à exécuter.

2

Tout passer par un seul point d'entrée, par ex. index.php n'est pas MVC, c'est le pattern FrontController. Cela va bien avec MVC cependant. Voir mes connexes answer here. En dehors de cela, pourquoi ne pas consulter quelques-uns des cadres autour pour apprendre comment ils le font. Ne signifie pas que vous devez les utiliser, il suffit de regarder leur code et de s'adapter à votre propre cadre.

1

Comment apprendre à faire vous-même, mais toujours utiliser un cadre? De toute façon, jetez un oeil à un framework open source comme Symfony ou des applications CMS comme Wordpress, Jommla! etc, et vous trouverez qu'ils utilisent tous mod_rewrite pour régler les choses.

1

La plupart des frameworks PHP utilisant mod_rewrite accomplissent le même objectif, et c'est le seul moyen de supprimer index.php et de rendre les URL plus conviviales, de manière segmentée.

Je dirais que vous êtes sur la bonne voie.

Cette méthode que vous avez utilisée est appelée FrontController Pattern, et elle est également utilisée par ces frameworks, pour suivre le modèle MVC. Si vous tenez à une suggestion, je vous recommande de faire passer chaque requête à travers chaque contrôleur de page, en étendant un contrôleur de base, puisque chaque site a des structures de données de base que vous devrez probablement utiliser dans chaque page, tels que les modèles et le contrôle de session.

Questions connexes