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

时间:2010-02-01 00:03:05

标签: php zend-framework routes module

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

test.com/api/rest

test.com/api/xmlprc

目前我有api映射到模块目录。然后,我设置了一条路线,使其成为休息路线。 test.com/api是一条休息路线,但我宁愿让它成为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 = new Zend_Rest_Route($ front,array(),array(       '休息'   ));   $ router-> addRoute('rest',$ restRoute);

返回$ router;

在application.ini中:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

我知道它会涉及路由,但有时我发现Zend Framework文档有点难以理解。

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

2 个答案:

答案 0 :(得分:0)

你的原始线就是这个。

$restRoute = new Zend_Rest_Route($front, array(), array( 'rest' ));

要为特定控制器启用Zend_Rest_Route,请添加一个控制器名称数组作为每个模块数组元素的值。

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

另请参考 http://framework.zend.com/manual/en/zend.controller.router.html

我希望这可能有所帮助。

答案 1 :(得分:0)

你可能真的想做像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'
                                            )
        ));

然后只需检查您的参数“request-type”,并根据您拥有的内容提供请求。 您应该根据您的请求更改布局以包含JSON或XML。

您还需要一个API模块。

注意:请注意当前将模块的引导程序添加到所有模块中,以便在所有模块中运行此路由。我目前正在检查解决此问题的方法,因此无法告诉您如何操作。

希望它有所帮助!