代码之家  ›  专栏  ›  技术社区  ›  Steven Mercatante Dimitri Kopriwa

如何将Zend框架的路由模式更改为不使用键/值对?

  •  0
  • Steven Mercatante Dimitri Kopriwa  · 技术社区  · 15 年前

    而不是使用 controller/action/key1/value1/key2/value2 作为我的网址,我想使用 controller/action/value1/value2 . 我想我可以通过在我的引导程序类中定义一个自定义路由来做到这一点,但是我希望我的整个应用程序都能这样做,所以为每个操作添加一个自定义路由是不可能的。

    这有可能吗?如果是,我将如何访问 valueN ?我希望能够在我的操作方法的签名中定义参数。E.X.

     // PostsController.php
    
     public function view($postID) {
          echo 'post ID: ' . $postID;
     }
    

    我正在使用Zend框架1.9.3

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   David Snabel-Caunt    15 年前

    虽然我认为目前的路由器不可能允许N值(一个固定的数字可以工作),但你可以编写一个自定义的路由器来为你做这件事。

    不过,我会质疑这种方法,并建议实际列出所有路线不会花费很长时间,从长远来看会更容易。按照您的建议设计的路由意味着,您的命名参数的顺序总是相同的,即。

    /controller/action/id/title/colour
    

    或者他们几乎是匿名的

    /controller/action/value1/value2/value3
    

    用代码一样

    $this->getRequest()->getParam('value2'); //fairly meaningless
    
        2
  •  1
  •   smack0007    15 年前

    它必须是n还是可以说是有限值?例如,你能想象你永远不需要超过5个参数吗?如果是这样,您可以设置路由:

     /:controller/:action/:param0/:param1/:param2/:param3/:param4
    

    即使您没有为每个操作指定全部5个参数,它也会起作用。如果您在其他地方需要6个,您可以在路线上添加另一个/:paramn。

    我以前使用过的另一个解决方案是编写一个插件,它解析请求的URI并将请求对象中的所有额外参数放入DispatchloopStartup()方法中。我更喜欢第一种方法,因为它使参数的来源更加明显。