2011-10-07 3 views
0

J'essaie d'extraire le nom de contrôle de l'URL et de le faire correspondre avec le contrôleur correct dynamiquement dans index.php.routage dynamique avec contrôleur frontal php

Ma racine app: /localhost/app/index.php

Donc, fondamentalement, quand je tapais /localhost/app/index.php/home, en essayant de inlude home_controller.php. Voici le code;

$parts = array_slice(explode('/',$_SERVER["REQUEST_URI"]),3); 
if(file_exists(dirname(__FILE__)."/controllers/".$parts[0].'_controller.php')) 
{ 
    include dirname(__FILE__)."/controllers/".$parts[0].'_controller.php'; 
} 

Il fonctionne très bien si la profondeur de la racine de l'application est 3. Il est cassé quand je l'ai changé le répertoire d'applications comme localhost/première/seconde/app/index.php/home

Parce qu'il est explosé par 3, $ parts [0] n'est plus "home" La question est comment puis-je détecter une partie du contrôleur d'une manière plus efficace?

Répondre

0

J'ai utilisé la variable $ _SERVER paht_info pour calculer, partie du contrôleur ..

$segments = array_slice(explode("/", $_SERVER["PATH_INFO"]),1); 

L'index zéro du tableau de segments $ est la partie du contrôleur et les autres parties sont la fonction. Btw vous devez vérifier les limites de tableau et si path_info est défini ou non.

0

/localhost/app/index.php/home localhost/première/seconde/app/index.php/home ressemble à sa faire votre chaîne les parties $ [0] pièce ressemble app/index.php/maison qui serait un chemin invalide. La seule façon de gérer cela est d'exploser cette chaîne avec/comme votre délimiteur ou d'utiliser le dernier dans le tableau comme l'emplacement de comparer ou de parcourir chaque. Le concept de MVC est que l'URL est toujours structurée comme la première partie, la maison dans ce cas nécessaire pour déterminer le contrôleur, 2+ sont généralement utilisés en réfrence aux paramètres d'une fonction du contrôleur

+0

utilisez-vous codeigniter d'ailleurs? – chris

+0

merci. Je n'utilise pas CI. Après avoir explosé avec "/" encore, je vais avoir localhost, premier, deuxième, app, index.php, à la maison .. Je ne veux pas de boucle dans ce tableau pour trouver le contrôleur correct.Comme vous pouvez le voir, ce n'est pas efficace .. que se passe-t-il si vous parcourez en arrière, si l'URL est localhost/premier/second/app/index.php/home/settings? Je veux juste appeler la fonction des paramètres du contrôleur à la maison. @chris –

+0

Im seulement penser à des choses folles lol. Aucun d'entre eux ne fonctionnera bien pour ce qui semble être votre jeu final. – chris

Questions connexes