Как построить строку запроса в Zend Framework? - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь построить строку запроса следующим образом:

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

Я хочу добавить массив в строку запроса. Например, array('find_loc'=>'New+York', 'find_name'=>'starbucks')

Я ожидаю получить URL, похожий на http://example.com/1/?find_loc=New+York&find_name=starbucks

Какой лучший способ сделать это? Я нашел похожий вопрос , в котором предлагалось добавить строку в URL. Есть ли помощник для строки запроса?

Ответы [ 4 ]

1 голос
/ 22 июля 2011

Простого ответа на ваш вопрос нет.

Вот описание класса:

/**
 * 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, которые зависят от маршрутов и маршрутизатора

Я думаю, что описание понятно в его назначении. Используйте его для создания URL-адресов, которые зависят от маршрутов и маршрутизатора. Поэтому просто добавьте строки запроса в соответствии с рекомендацией в ссылку, которую вы разместили в своем вопросе.

0 голосов
/ 09 февраля 2017

Рабочий код

/**
 * 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;
    }

}

, поскольку вышестоящий код не работает

0 голосов
/ 23 июля 2011

Вы можете сделать пользовательский помощник:

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>

0 голосов
/ 22 июля 2011

На вас должно работать следующее:

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

ZF-Router отобразит значения в объект запроса.

В вашем контроллере вы можете получить доступ к этим параметрам с помощью Response-Object :

$loc  = $this->getRequest()->getParam('find_loc');
$name = $this->getRequest()->getParam('find_name); 
...