URL Zend Framework и метод get - PullRequest
       22

URL Zend Framework и метод get

2 голосов
/ 01 октября 2010

Я занимаюсь разработкой веб-сайта с использованием Zend Framework.

У меня есть поисковая форма с методом get.когда пользователь нажимает кнопку отправки, строка запроса появляется в URL после?отметка.но я хочу, чтобы он был похож на URL.

возможно ли это?

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

Как и в случае с подходом JS, вы можете перенаправить обратно на нужный URL-адрес. То есть пусть форма отправляется через GET, а затем перенаправляется в стиль маршрутизации ZF.

Это, однако, излишне, если у вас нет веских причин для создания аккуратных URL-адресов для ваших поисковых запросов. Вообще говоря, поисковая форма должна отправить запрос GET, который можно добавить в закладки. И нет ничего плохого в параметрах стиля? Param = val в URL: -)

URL-адреса ZF немного странны, так как заставляют параметры URL-адреса быть частью основного URL-адреса. То есть domain.com/controller/action/param/val/param2/val, а не domain.com/controller/action?param=val&param2=val

Это не всегда то, что вы хотите, но похоже, что фреймворки работают с параметрами URL

2 голосов
/ 24 февраля 2011

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

Вариант использования, который требует этого, - это простой список записей с формой вверху для добавления некоторых фильтров (через GET), возможно, сортировки некоторых столбцов и добавления Zend_Paginate для хорошей меры.Я столкнулся с проблемами при использовании помощника вида Url в своей части разбиения на страницы, но я подозреваю, что даже при простой сортировке и форме фильтра Zend_View_Helper_Url все равно будет падать.

Но я отвлекся.Мое решение состояло в том, чтобы добавить метод к моему базовому классу контроллера, который объединяет все необработанные параметры строки запроса с существующими slashy-параметрами в стиле 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 голосов
/ 01 октября 2010

Нет очевидного решения. Форма, сгенерированная zf, будет стандартной HTML-формой. При отправке из браузера с помощью GET это приведет к запросу типа

/action/specified/in/form?var1=val1&var2=var2

Единственным решением для получения «зендоподобного URL» (с / вместо? Или &) было бы взломать отправку формы с использованием javascript. Например, вы можете прослушать onSubmit, отменить отправку и вместо этого перенаправить браузер на переведенный URL. Лично я не верю, что это решение стоит дополнительной сложности, но оно должно выполнять то, что вы ищете.

...