PHP + Apache – Parse URL mod_rewrite

Je veux utiliser mod_rewrite avec PHP, parsingr l’URL avec ce format:

http://www.domain.com/Path-to-index.php/Class_to_Load/Function_to_Execute/Arguments_as_array_to_the_function

La classe à charger sera incluse dans les classes répertoires, avec un strtolower puis ucfirst , comme:

http://www.domain.com/Path-to-index.php/SAMPLE inclura classes/Sample.php et exécutera la fonction action_index , car aucune fonction n’a été utilisée.

Ensuite, lorsque cette URL est ouverte: http://www.domain.com/Path-to-index.php/SAMPLE/Login/User , PHP devrait inclure classes/Sample.php et exécuter action_Login($args = Array(0 => "User")); .

S’il vous plaît, j’ai besoin de savoir comment faire cela.

Votre index.php pourrait ressembler à ceci:

 // @todo: check if $_SERVER['PATH_INFO'] is set $parts = explode('/', sortingm($_SERVER['PATH_INFO'], '/')); // get the part between `index.php` and `?` // build class name & method name // @todo: implement default values $classname = ucfirst(strtolower(array_shift($parts))); $methodname = "action_" . array_shift($parts); // include controller class // @todo: secure against LFI include "classes/$classname.php" // create a new controller $controller = new $classname(); // call the action // @todo: make sure enough parameters are given by using reflection or default values call_user_func_array(Array($controller, $methodname), $parts); 

Votre .htaccess pour supprimer index.php de l’url:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 

Il est toujours intéressant de déployer votre propre framework pour en apprendre plus sur PHP, mais si vous codez vraiment quelque chose de plus gros, je vous recommande fortement d’utiliser un framework bien connu et bien documenté. Il existe de nombreux bons frameworks, qui ont déjà été testés et utilisés en production. Jetez un coup d’œil à tous les avis @todo ci-dessus. Ce sont toutes des questions qui sont déjà traitées par un framework et vous n’avez pas besoin de vous soucier de ces choses.