1

我想将 mod_rewrite 与 PHP 一起使用,使用以下格式解析 URL:

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

要加载的类将包含在 directoryclasses中,带有strtolowerthen ucfirst,例如:

http://www.domain.com/Path-to-index.php/SAMPLE将包含classes/Sample.php并执行函数action_index,因为没有使用函数。

然后,当这个 url 打开: 时http://www.domain.com/Path-to-index.php/SAMPLE/Login/User,PHP 应该包含classes/Sample.php并执行action_Login($args = Array(0 => "User"));.

请我需要知道如何做到这一点。

4

1 回答 1

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);

您用于从 url 中删除 index.php 的 .htaccess:

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

使用自己的框架来学习更多关于 PHP 的知识总是很有趣,但如果你真的要编写更大的代码,我强烈建议使用知名且文档齐全的框架。那里有很多好的框架,它们之前都经过了良好的测试并在生产中使用过。只需看看@todo上面的所有通知。这些都是框架已经处理好的问题,你不需要关心这些事情。

于 2013-01-28T13:38:08.517 回答