【问题标题】:Zend Framework - How do make a hierarchy without it being a module?Zend Framework - 如何在没有模块的情况下创建层次结构?
【发布时间】:2010-02-01 00:03:05
【问题描述】:

这是我的具体问题。我想创建一个 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);

返回$路由器;

在 application.ini 中:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

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

当我访问 test.com/rest/controller/ 时,它会按应有的方式工作,但如果我访问 test.com/api/rest/,它会告诉我我的模块是 api 而控制器是 rest。

【问题讨论】:

    标签: php zend-framework routes module


    【解决方案1】:

    您实际上可能想做一些类似 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 模块。

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

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      你的原话是这样的。

      $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

      我希望这会有所帮助。

      【讨论】:

      • 我实际上想要 api/rest/:controller 的任何东西都可以休息。所以 api/rest/user 和 api/rest/differentresource 都是 REST。我想在前面有一个虚拟 api 文件夹,以便我可以提供其他服务。
      猜你喜欢
      • 1970-01-01
      • 2018-01-08
      • 2012-07-13
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多