我有一个更大的应用程序,在php中有一个Frontcontroller,用于处理传入的ajax请求。我正在考虑一个处理Action->Method映射的好方法,这个控制器负责实例化其他类并在那里执行方法。
开关太大了,而且很难看。我在考虑创建一个数组,然后简单地做:
if(in_array($action, $methodmap)){
$methodmap[$action]();
}
但不确定这会有多高效,也不确定是否有其他更好的选择,性能很重要,因为这个控制器处理大量传入请求。
谢谢!
您可以创建一个简单的路由系统。
index.php
<?php
class InvalidClassException extends Exception {}
function autoloader($class)
{
$path = 'controllers/'.$class.'.php';
if (!ctype_alnum($class) || !file_exists($path))
throw new InvalidClassException("Couldn't find '$class'");
require($path);
}
spl_autoload_register('autoloader');
$request = isset($_GET['request'])?$_GET['request']:'front';
$controller = new $request();
$controller->index();
以及一个目录controllers/
,用于存储所有控制器。例如
控制器/test1.php
<?php
class Test1
{
public function index()
{
print "Test 1";
}
}
访问index.php?request=test1
时,会调用Test1->index()
,从而输出
测试1
TRy使用"路由"配置文件。。。这样,您就可以向应用程序添加新的路由,而无需更改实际操作/方法映射代码