避免在frontcontroller中使用大型switch语句



我有一个更大的应用程序,在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使用"路由"配置文件。。。这样,您就可以向应用程序添加新的路由,而无需更改实际操作/方法映射代码

相关内容

  • 没有找到相关文章

最新更新