我有一个更大的应用程序,在php中使用Frontcontroller来处理传入的ajax请求。我正在考虑一种处理Action->方法映射的好方法,这个控制器负责实例化其他类并在那里执行方法。
开关变得太大而且很难看。我正在考虑创建一个数组并简单地执行:
if(in_array($action, $methodmap)){
$methodmap[$action]();
}
但不确定效率如何,或者是否还有其他更好的选择,性能很重要,因为这个控制器会处理大量的传入请求。
谢谢!
答案 0 :(得分:2)
您可以创建一个简单的路由系统。
<?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/
。 E.g。
<?php
class Test1
{
public function index()
{
print "Test 1";
}
}
访问index.php?request=test1
时,将调用Test1->index()
,因此输出
测试1
答案 1 :(得分:0)
尝试使用“路由”配置文件...这样,您可以向应用程序添加新路由,而无需更改实际操作/方法映射代码