zend 框架 url 和获取方法

问题描述 投票:0回答:3

我正在使用 zend 框架开发一个网站。

我有一个带有 get 方法的搜索表单。当用户单击“提交”按钮时,查询字符串将出现在 url 中的 ? 之后。标记。但我希望它像 url 一样 zend 。

可能吗?

php forms zend-framework get submit
3个回答
3
投票

除了 JS 方法之外,您还可以重定向回您想要的首选 URL。 IE。让表单通过 GET 提交,然后重定向到 ZF 路由样式。

然而,除非您有充分的理由想要为搜索查询创建简洁的 URL,否则这有点过分了。一般来说,搜索表单应该发送可以添加书签的 GET 查询。 URL 中的 ?param=val 样式参数没有任何问题:-)

ZF URL 有点奇怪,因为它们强制 URL 参数成为主 URL 的一部分。 IE。 domain.com/controller/action/param/val/param2/val 而不是 domain.com/controller/action?param=val¶m2=val

这并不总是您想要的,但似乎是框架使用 URL 参数的方式


3
投票

在对此愤怒了一天半之后,并尽力找出正确的方法来做到这一点相当简单,我放弃了并做了以下事情。 我仍然不敢相信没有更好的方法。

需要这样做的用例是一个简单的记录列表,顶部有一个表单用于添加一些过滤器(通过 GET),也许是一些列排序,并且为了更好的测量而添加了 Zend_Paginate。 我在分页部分中使用 Url 视图助手时遇到了问题,但我怀疑即使只是排序和过滤器表单,Zend_View_Helper_Url 仍然会崩溃。

但我离题了。 我的解决方案是向我的基本控制器类添加一个方法,该方法将任何原始查询字符串参数与现有的 zend 样式斜线参数合并,并重定向(但仅在必要时)。 该方法可以在任何不需要处理 POST 的操作中调用。

希望有人会发现这很有用。 或者更好的是,找到更好的方法:

  /**
   * Translate standard URL parameters (?foo=bar&baz=bork) to zend-style 
   * param (foo/bar/baz/bork).  Query-string style
   * values override existing route-params.
   */
  public function mergeQueryString(){
    if ($this->getRequest()->isPost()){
      throw new Exception("mergeQueryString only works on GET requests.");
    }    
    $q = $this->getRequest()->getQuery();
    $p = $this->getRequest()->getParams();
    if (empty($q)) {
      //there's nothing to do.
      return;
    }
    $action = $p['action'];
    $controller = $p['controller'];
    $module = $p['module'];
    unset($p['action'],$p['controller'],$p['module']);
    $params = array_merge($p,$q);
    $this->_helper->getHelper('Redirector')
            ->setCode(301)            
            ->gotoSimple(
                    $action,
                    $controller,
                    $module,
                    $params);

  }

2
投票

没有明显的解决方案。 zf 生成的表单将是标准的 html 表单。当使用 GET 从浏览器提交时,会产生如下请求:

/action/specified/in/form?var1=val1&var2=var2
获得“zendlike url”(用 / 代替 ? 或 &)的唯一解决方案是使用 javascript 破解表单提交。例如,您可以监听 onSubmit,中止提交并将浏览器重定向到翻译后的 URL。我个人认为这个解决方案不值得增加复杂性,但它应该能够满足您的需求。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.