Php Zend_表单和RESTful HTTP请求

Php Zend_表单和RESTful HTTP请求,php,http,zend-framework,nginx,zend-form,Php,Http,Zend Framework,Nginx,Zend Form,我在Zend中实现了一个搜索表单(后端的SOLR)。 为了给用户提供更多的控制,我添加了一个用于应用某些内容过滤器的多检查框 事情是在以下步骤中发生的(请耐心听我说): 请求已发出,类似于/search/?q=bla&filter=1 请求在控制器中重写为restful到:/search/query/bla/filter/1 如果用户删除筛选器1,添加筛选器2并提交请求,则请求变为:/search/query/bla/filter/1?q=bla&filter=2 如何使用它正确创建restfu

我在Zend中实现了一个搜索表单(后端的SOLR)。 为了给用户提供更多的控制,我添加了一个用于应用某些内容过滤器的多检查框

事情是在以下步骤中发生的(请耐心听我说):

  • 请求已发出,类似于
    /search/?q=bla&filter=1

  • 请求在控制器中重写为restful到:
    /search/query/bla/filter/1

  • 如果用户删除筛选器1,添加筛选器2并提交请求,则请求变为:
    /search/query/bla/filter/1?q=bla&filter=2

  • 如何使用它正确创建restful请求。这里的问题是,使用控制器的getRequest()功能,我还将获得第一个过滤器的值,这意味着我无法知道可以放弃哪个过滤器


    因此,总结一下:
    如何正确使用Zend_表单创建RESTful HTTP请求?我想,您正在尝试解决一个不存在的问题。你在追求美学,而不是宁静的顺从

    REST告诉您需要识别资源,而不是您的资源链接应该看起来很好(从某种意义上说)。但由于您的搜索是一种过滤器,因此使用QueryParam是完全可以接受的

    我认为,您在REST中使用“搜索”一词是错误的。搜索不是一种资源(至少在您的情况下)

    您可以通过执行以下操作来隐藏搜索实现:

    GET /articles?q=foo&filter=1
    
    Location: /articles/search/a125f41fbc135d
    
    构建过滤器标准的方式应该无关紧要。

    或者,您可能想将“搜索”定义为一种资源(实际上IIRC也是如此)

    会导致如下结果:

    GET /articles?q=foo&filter=1
    
    Location: /articles/search/a125f41fbc135d
    

    其中
    a125f41fbc135d
    是搜索的标识符,用于识别搜索资源。

    感谢您的详细回复。您的第一个解决方案是我正在使用的Zend_Paginator重新创建URL,这意味着我丢失了以“?q=”形式出现的GET请求,所有这些都是通过将其替换为URL控制器/action/page/number来实现的——我该怎么做呢?(在paginationcontrol视图中,它使用$this->url('page'=>$this->next)生成url);