2010-06-17 9 views
1

한 동작 (foo)에서 다른 동작 (foobar)으로 매개 변수를 전달하려고합니다.이 심포니 코드가 작동하지 않는 이유는 무엇입니까?

액션 foo는, 나는 이렇게 인수를 설정 :

조치는 foobar에서
$request->getParameterHolder()->set('arg1', 'alice'); 
$request->getParameterHolder()->set('arg2', 'bob'); 

, 내가 이렇게 PARAMS를 검색하려고 :

$arg1 = $request->getParameter('arg1'); 
$arg2 = $request->getParameter('arg2'); 

$this->forward404Unless($arg1 && $arg2); //always forwarded 

참고 : 나는 내가 저장할 수 있음을 알고있다 params를 사용자 세션 변수에 추가합니다.하지만 그렇게하고 싶지는 않습니다. 나는 이것을 매개 변수로 전달하고자합니다 - 어떤 아이디어가 이것을 어떻게 작동하게할까요?

답변

2

당신은 단순히이 시도 할 수 있습니다 :

$this->redirect('module/action2?'. 
     http_build_query(array("arg1"=> "alice", "arg2"=>"bob"))); 
+0

D' oh! - http_build_query()에 대해 잊어 버렸습니다. 왜 나는 항상 물건을 더 복잡하게하고 싶습니까?) 간단하고 우아한 솔루션에 +1하십시오. – morpheous

1

greg0ire의 대답 소리는 당신이 요구하는 무엇하지만 쿼리 문자열 매개 변수를 전달하는 것은 아닌 경우보고 가치가있을 수있는 다른 방법의 몇있는 것처럼 어려운 요구 사항.

foo 이후에 foobar 작업을 실행하려면 forward을 사용할 수 있습니다. 리다이렉트와 달리 이것은 동일한 요청주기에있게되므로 세션을 건드리지 않고 변수를 전달할 수 있습니다.

왜 세션을 사용하고 싶지는 않지만 심포니에는 중간 집이 있습니다 : flash attributes. 이것들은 세션에 저장되지만 다음 요청을 넘어서지 않도록 보장됩니다. 이는 적절한 절충안이 될 수 있습니다.

+0

@sponz : 플래시 속성을 사용하고 싶지 않습니다;) 설명해야 할 것은, 모든 매개 변수가 첨부 된 GET 요청을 기대하는 공용 API를 사용하고 있습니다. 앞으로에 대한 팁에서 제가 게시 한 스 니펫이 때때로 작동하는 이유를 설명합니다. 내 코드를 확인한 결과, 나는 그것이 성공한 기회를 찾았고, 나는 앞으로 나아 갔다. +1에 대한 답변은 – morpheous

+0

입니다. 궁극적으로 당신이 찾고 있던 답변이 아니라 기꺼이 도움이된다는 것을 알았습니다. Symfony에서의 작업과 그 결과 사이에 데이터를 전달하는 다양한 방법은 다소 혼란 스러울 수 있습니다. 주로 링크 된 답변에 표시되도록하려면 주제에 대한 이전 답변 중 하나가 있습니다. http://stackoverflow.com/questions/2896274/symfony-trying-to-retrieve-a-variable-saved-using- sfcontextgetinstance/2896341 # 2896341 –

관련 문제