这是我第一次尝试创建一个frontController,我遇到了一些小问题。
首先让我给你一个印象:
当我http://mysite.com/test
在浏览器中打开时,服务器会调用一个带有 GET 参数 $controller (test) 的 index.php。这是由 .htaccess 完成的。在 index.php 中应该创建一个 $controller 类的实例。为此,我使用 PHP 的 __autoload 函数。所以代码看起来像这样:
$controller = $_GET["controller"];
function __autoload($controller)
{
include("controllers/$controller.php");
if(!class_exists($controller, false))
{
eval
('
class '. $controller . '
{
public function __construct()
{
include("404.html");
exit();
}
}
');
}
}
$application = new $controller;
当您查看我提供的代码时,您可能已经注意到其中的eval()东西。当 $controller 类不存在时,我使用它来避免致命错误,并显示 404 而不是它。
乐趣从这里开始:当有人输入一个类似的网址时
将有
解析错误:语法错误,意外的“!”
和...
致命错误:找不到类 'ImATroll!:D'
所以问题是:我怎样才能抓住这个?如何以仅包含类名允许的字符的方式转义 $controller 变量?