2014-11-18 2 views
1

Надеюсь, что название не звучит слишком запутанно, но я понятия не имел, как назвать свою проблему.Zend Framework 1 пропуск параметров с использованием get to route

Краткое введение:
Я использую Zend 1.1X.
На данный момент я работаю с формой поиска, отправляющей несколько параметров через POST.

Теперь я должен изменить его, чтобы использовать GET, у меня есть маршрут, созданный глядя похож на:

"search/what/:what/shape/:shape" 

и так далее, у меня также есть 2 дополнительных параметров, которые принимает нулевое значение по умолчанию.

Я пытаюсь генерировать URL (с помощью Zend View Helper URL) в действии формы, но он бросает исключение:

Uncaught exception 'Zend_Controller_Router_Exception' with message what is not specified 

Я теперь не знаю, что я должен делать. Если я изменю свой маршрут только на «поиск», он затем правильно отправит форму, но в итоге я получаю "search?what=XXXX&shape=YYYY" вместо "search/what/XXXX/shape/YYYY".

Есть ли способ, которым можно было бы обращаться так, как мне нравится ??? :>

@EDIT

Я думаю, что это также следует отметить, - у меня есть другой вид, аналогичный один, указывая на маршрут без параметров, указанных, а также и УИР получает «переводится» в форме " ключ/значение ". Единственное различие между ними заключается в том, что первый не использует хелпер Url, вместо этого часть метода жестко закодирована, и моя форма представляется программно (button => jQuery stuff => submit). Будет ли это иметь значение здесь, поскольку я считаю, что это не должно? :>

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

Заранее спасибо!

+0

Как использовать Zend View Helper URL? – doydoy44

+0

echo $ this-> url (array(), 'search', true); - имя маршрута также находится в поиске;> – user1970395

ответ

0

С помощью метода GET форма генерирует URL вроде этого: action?param1=val1&param2=val2&.... Я вижу два решения:
Первый является регенерировать URL с помощью javacsript, мы можем представить себе что-то вроде этого:

<form method="get" id="id_form"> 
.... 
</form> 
<script> 
    var objet_form = document.getElementById('id_form'); 

    function gestionclic(event){ 
     var url = objet_form.action; 
     for(var i = 0; i < objet_form.length; i++){ 
      url += "/" + objet_form[i].name + "/" + objet_form[i].value; 
     } 
     objet_form.action = url; 
    } 

    if (objet_form.addEventListener){ 
     objet_form.addEventListener("submit", gestionclic, false); 
    } else{ 
     objet_form.attachEvent("onsubmit", gestionclic, false); 
    } 
</script> 

Но Я не думаю, что это хорошее решение.

Во-вторых, управлять ею с помощью плагина:

Для плагина, он должен быть объявлен в bootstrap.
Например:

public function _initPlugins(){ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new Application_Plugin_PRoutage()); 
} 

в этом примере, папка application/plugins, создать PRoutage.php плагин так:

class Application_Plugin_PRoutage extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
    {   
    ... 
    } 
} 

и с переменной $request у вас есть доступ к данным как массив с $request->getParams() ,
Мы можем представить себе что-то вроде этого:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
{   
    $param = $request->getParams(); 
    $what = ""; 
    $shape = ""; 
    if (isset($param['what']) $what = $param['what']; 
    if (isset($param['shape']) $shape = $param['shape']; 

    if ($what == "XXXX" && $shape == "YYYY"){ 
     $request->setControllerName('other_controler') 
       ->setActionName('other_action') 
       ->setDispatched(true) ; 
    } 
} 

Я надеюсь, что это поможет вам

+0

привет, спасибо;) это немного помогает, конечно;) Я подумаю об этом решении, если ничего не выйдет, но я думаю, что я должен также упомянуть, что я работаю по устаревшему коду, и у меня есть аналогичная ситуация (другая форма), указывающая на маршрут без каких-либо параметров, и они получают «перевод» в/key1/value1/key2/value2: (Я сравнивал эти две формы и маршруты, и они не имею никакой разницы - я действительно застрял на этом, потому что я не могу понять возможный источник проблемы – user1970395

+0

Спасибо за ваше возвращение. Я обновляю свой ответ, возможно, решение js хорошо для вас.;) – doydoy44