如何在zend框架中构建查询字符串?

时间:2011-07-22 17:12:20

标签: zend-framework zend-view

我正在尝试构建一个查询字符串,如下所示:

<a href="<?= $this->url(array('page' => $this->next)) ?>" class="next">Next Page</a>

我想在查询字符串中添加一个数组。例如,array('find_loc'=>'New+York', 'find_name'=>'starbucks')

我希望获得看起来像http://example.com/1/?find_loc=New+York&find_name=starbucks

的网址

最好的方法是什么?我找到了similar question建议将字符串附加到网址。是否有查询字符串的帮助器?

4 个答案:

答案 0 :(得分:1)

对你的问题的简单回答是否定的。

这是课程描述:

/**
 * Helper for making easy links and getting urls that depend on the routes and router
 *
 * @package    Zend_View
 * @subpackage Helper
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
  

帮助您轻松链接并获取依赖 路由路由器

的网址

我认为描述的目的很明确。用它来制作依赖于路由和路由器的URL。因此,只需将您的查询字符串作为建议添加到您在问题中发布的链接中。

答案 1 :(得分:0)

以下内容对您有用:

<a href="<?= $this->url(array('page' => $this->next, 'find_loc' => 'New York', 'find_name' => 'starbucks')')) ?>" class="next">Next Page</a>

ZF-Router会将值映射到Request对象。

在您的控制器中,您可以使用Response-Object

访问这些参数
$loc  = $this->getRequest()->getParam('find_loc');
$name = $this->getRequest()->getParam('find_name); 

答案 2 :(得分:0)

您可以制作自定义助手:

class My_View_Helper_UrlHttpQuery extends Zend_View_Helper_Abstract
{
    public function urlHttpQuery($query)
    {
        $urlHelper = $this->view->getHelper('url');
        $params = func_get_args();
        array_shift($params);//removing first argument
        $url = call_user_func_array(($urlHelper, 'url'), $params); 
        if(!is_string($query)) { //allow raw query string
            $query = array($query);
            $query = http_build_query($query);
        }
        if(!empty($query) {
            $url .= '?' . ltrim('?', $query);
        }
        return $url;
    }
}

在您使用视图注册此帮助程序后,您可以像<a href="<?=$this->urlHttpQuery(array('find_loc'=>'New+York', 'find_name'=>'starbucks'), array('page' => $this->next), 'routename', $otherUrlHelperParams) ?>" class="next">Next Page</a>

一样使用它

答案 3 :(得分:0)

工作代码

/**
 * Class Wp_View_Helper_UrlHttpQuery
 */
class Wp_View_Helper_UrlHttpQuery extends Zend_View_Helper_Abstract
{
    public function urlHttpQuery($query = array())
    {
        $urlHelper = $this->view->getHelper('url');
        $params = func_get_args();
        //removing first argument
        array_shift($params);
        $url = call_user_func_array(array($urlHelper, 'url'), $params);
        if (is_array($query) || is_object($query)) {
            $query = http_build_query($query);
        }

        if (!empty($query)) {
            $url .= '?' . ltrim($query, '?');
        }
        return $url;
    }

}

因为上游代码不起作用