我想在PHP中使用mod_rewrite,使用以下格式解析URL:
http://www.domain.com/Path-to-index.php/Class_to_Load/Function_to_Execute/Arguments_as_array_to_the_function
要加载的类将包含在目录classes
中,其中包含strtolower
,然后是ucfirst
,如:
http://www.domain.com/Path-to-index.php/SAMPLE
将包含classes/Sample.php
并执行函数action_index
,因为未使用任何函数。
然后,当此网址打开时:http://www.domain.com/Path-to-index.php/SAMPLE/Login/User
,PHP应包含classes/Sample.php
并执行action_Login($args = Array(0 => "User"));
。
我需要知道如何做到这一点。
答案 0 :(得分:2)
你的index.php看起来像这样:
// @todo: check if $_SERVER['PATH_INFO'] is set
$parts = explode('/', trim($_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);
你的.htaccess用于从网址中删除index.php:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
推出自己的框架以了解有关PHP的更多内容总是很有趣,但如果你真的在编写更大的代码,我强烈建议使用一个众所周知且记录良好的框架。有很多好的框架,经过充分测试并在之前用于生产。只需查看上面的所有@todo
通知即可。这些都是问题,已经由框架处理,您无需关心这些事情。