2014-11-18 8 views
1

제목이 너무 혼란 스럽기를 바라지는 않지만 내 문제의 이름을 지정하는 방법을 모릅니다.Zend Framework 1 경로를 사용하여 매개 변수를 전달하십시오

소개 소개 :
저는 Zend 1.1X를 사용하고 있습니다.
현재 POST를 통해 몇 가지 매개 변수를 전송하는 검색 양식을 사용하고 있습니다. 또한 기본적으로 null이 걸리는이 개 선택적 매개 변수를 가지고, 그래서

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

과 :

지금 나는 것과 유사하게 보이는 생성 된 경로를 가지고, 그것은 GET 사용하도록 변경해야합니다.

나는 양식의 작업에서 (젠드보기 도우미 URL을 사용하여) URL을 생성하기 위해 노력하고있어,하지만 예외가 발생합니다 : 내가 지금 무엇을해야하는지 생각이없는

Uncaught exception 'Zend_Controller_Router_Exception' with message what is not specified 

. 내 경로를 "검색"으로 변경하면 정확하게 양식을 전송하지만 "search/what/XXXX/shape/YYYY" 대신 "search?what=XXXX&shape=YYYY"으로 끝납니다.

내가 좋아하는 방식으로 처리 할 수있는 방법이 있습니까 ??? :>

@EDIT

나는이도 언급해야한다고 생각 - "의 형태로 나뿐만 아니라 지정된 매개 변수없이 경로를 가리키는 다른 형태와 유사 하나를 가지고 URI가"번역 "도착 키/값 "쌍으로 구성됩니다. 그들 사이의 유일한 차이점은 첫 번째는 Url 도우미를 사용하지 않고, 대신 메소드 부분을 하드 코딩하고 양식을 프로그래밍 방식으로 제출한다는 것입니다 (button => jQuery stuff => submit). 그게 달라져서는 안된다고 생각하니, 여기에 차이가 있습니까? :>

내가 정말 순간에 붙어 그리고 난 단순히 잘못 찾을 수 없기 때문에이 동작 가능한 소스가 당신에게 올 것이다 희망

.. 사전에

감사합니다! action?param1=val1&param2=val2&.... 내가이 개 솔루션을 참조하십시오 : 양식이 같은 URL을 생성하는 GET 방법을

+0

어떻게 젠드보기 도우미 URL을 사용합니까? – doydoy44

+0

echo $ this-> url (array(), 'search', true); - 경로 이름도 검색입니다.> – user1970395

답변

0


가 첫 번째는 javacsript로 URL을 재생하는 것입니다, 우리는 같은 것을 상상할 수 :

<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