2

我有一个更大的应用程序,它在 php 中有一个 Frontcontroller 来处理传入的 ajax 请求。我正在考虑一种处理 Action->Method 映射的好方法,这个控制器负责实例化其他类并在那里执行方法。

开关太大了,太丑了。我正在考虑创建一个数组并简单地做:

if(in_array($action, $methodmap)){
  $methodmap[$action]();
}    

但不确定这会有多高效,或者是否有任何其他更好的选择,性能很重要,因为该控制器处理大量传入请求。

谢谢!

4

2 回答 2

2

您可以创建一个简单的路由系统。

索引.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=test1Test1->index()会被调用,从而输出

测试 1

于 2012-01-28T16:43:17.697 回答
0

尝试使用“路由”配置文件来代替......这样,您可以向应用程序添加新路由,而无需更改实际的操作/方法映射代码

于 2012-01-28T16:28:11.000 回答