首页 > 解决方案 > Zend Router 中的动态键=>值段

问题描述

需要在 Zend Router 中实现动态路由参数分段。这个想法是:拥有 url: /route/:route/resource/:resource/:identifier,具有以下配置:

    'orchestration.rest.dynamic-router' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/route/:route/resource/:resource[/:identifier]',
                    'defaults' => array(
                        'controller' => 'Controller',
                    ),
                ),
            ),

需要使其支持n个不同的key=>value路由器参数,格式如下:

/route/:route/resource/:resource/:identifier/key1/value1/key2/value2/key3/value3

第二个问题是,这只有在您提供了可选的 :identifier 参数时才有效。

这是我检查过的,但不确定如何实现目标: https ://docs.zendframework.com/zend-router/routing/#zend92router92http92segment

标签: phpzend-frameworkzend-framework2zend-framework3zend-route

解决方案


保留静态路由。

1)它们被缓存以获得更好的性能
2)如果您使用休息逻辑,请使用 POST 方法,而不是 GET(url 中的参数)

路线

'orchestration.rest' => array(
                'type' => 'Segment',
                'options' => array(
                    'routerest' => '/routerest/:action',
                    'defaults' => array(
                        'controller' => 'Controller',
                    ),
                ),
            ),

使用 post 在服务器上使用休息操作,使用 Ajax 或其他...

 (pseudo code)
 datas={key1 : param1 , key2 : param2, etc...}
   url=yourDomain/routerest/show   (show=the action)
   send Ajax Request(or something else in another langage with METHOD=POST)

其他操作,例如“getdatas”

 ... use post to consume rest action on server, with Ajax, or other...
   datas={id1 : param1 , id2 : param2, etc...}
   url=yourDomain/routerest/getdatas   (getdatas=the action)

...在您的 Controller.php
...处理路由中的显示操作

  function showAction()  {
      $request = $this->getRequest();
      if ($request->isPost()) {
            $param1=$this->params()->fromPost('key1','defaultvalue');
            $param2=$this->params()->fromPost('key2','defaultvalue');
            ...
            ...
      } else {... ERROR..}
   }

...处理路线中的 getdatas 操作

 function getdatasAction()  {
      $request = $this->getRequest();
      if ($request->isPost()) {
            $id1=$this->params()->fromPost('id1','defaultvalue');
            $id2=$this->params()->fromPost('id2','defaultvalue');
            ...
            ...
            if ($id1$=='all') { return $this->redirect()->toRoute ('otherroute', array ('action' => 'xxx', 'paramxxx' => 'xx'));
            ...
            ...
      } else {... ERROR..}
   }

推荐阅读