Php Zend框架-如何在没有模块的情况下构建层次结构?

Php Zend框架-如何在没有模块的情况下构建层次结构?,php,zend-framework,routes,module,Php,Zend Framework,Routes,Module,这是我的具体问题。我想制作一个api级别,然后在该级别下,您可以选择使用哪种方法。例如: test.com/api/rest test.com/api/xmlprc 目前,我有到模块目录的api映射。然后我设置了一条路线,使之成为休息路线。test.com/api是一个rest路由,但我更希望它是test.com/api/rest。这将允许我以后添加其他内容 在Bootstrap.php中: $front = Zend_Controller_Front::getInstance(

这是我的具体问题。我想制作一个api级别,然后在该级别下,您可以选择使用哪种方法。例如:

test.com/api/rest

test.com/api/xmlprc

目前,我有到模块目录的api映射。然后我设置了一条路线,使之成为休息路线。test.com/api是一个rest路由,但我更希望它是test.com/api/rest。这将允许我以后添加其他内容

在Bootstrap.php中:

        $front = Zend_Controller_Front::getInstance();
  $router = $front->getRouter();
    $route = new Zend_Controller_Router_Route(
 'api/:module/:controller/:id/*',
 array('module' =>'default')
))

$router->addRoute('api',$route)

$restRoute=新Zend_Rest_路由($front,array(),array( “休息” )); $router->addRoute('rest',$restrate)

返回$router

在application.ini中:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
我知道这将涉及路由,但有时我发现Zend框架文档有点难以理解


当我去test.com/rest/controller/它应该如何工作,但如果我去test.com/api/rest/它告诉我我的模块是api,控制器是rest。

你的原始行是这样的

$restRoute = new Zend_Rest_Route($front, array(), array( 'rest' ));
要为特定控制器启用Zend_Rest_路由,请添加控制器名称数组作为每个模块数组元素的值

$restRoute = new Zend_Rest_Route($front, array(), array( 'api' ) => array('rest'));
也参考


我希望这会有所帮助。

您可能真的想做一些类似于api/:controller/:action.json或api/:controller/:action.xml的事情(我见过很多api都这样做,比如:Twitter)

要实现这一点,您可以执行以下操作:

$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter(); // returns a rewrite router by default
$router->addRoute(
            'json_request',
            new Zend_Controller_Router_Route_Regex(
                                            '([^-]*)/([^-]*)/([^-]*)\.json', 
                                            array(
                                                'controller'   => 'index',
                                                'action'       => 'index',
                                                'request_type' => 'json'),
                                            array(
                                                1 => 'module',
                                                2 => 'controller',
                                                3 => 'action'
                                            )
        ));
然后只需检查您的参数“requesttype”,并根据您所拥有的服务请求即可。 您还应该根据请求将布局更改为enconde JSON或XML

您还需要一个API模块

注意:请注意,当前已将模块的引导添加到所有模块中,以便在所有模块中运行此路由。我目前正在寻找一种方法来解决这个问题,所以我无法告诉你怎么做


希望有帮助

实际上,我希望api/rest/:controller中的任何东西都是rest。所以api/rest/user和api/rest/differentresource都是rest。我想有一个虚拟的api文件夹的前面,以便我可以提供其他服务。