Zend Framework 1 передает параметры используя get to route

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

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

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

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

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

Я пытаюсь сгенерировать 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",

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

@РЕДАКТИРОВАТЬ

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

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

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

1

Решение

С 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]