2011-04-10 8 views
0

사전 사과 - 심포니 아마추어가 상속 된 프로젝트와 함께 있습니다.symfony 1.0.17에서 매개 변수를 전달할 수 없습니다.

나는 애플 리케이션에 다음/프론트 엔드/모듈/최고/템플릿/indexSuccess.php 추가 한 : 그럼

<?php echo form_tag('contents/'.$adv_data->getId()) ?> 
<?php echo $sf_params->get('email'); ?> 
<?php echo input_tag('email', $sf_params->get('email'))?> 
<?php echo submit_tag('Next') ?> 
</form> 

을 나는 애플 리케이션에 다음/프론트 엔드/모듈/톱/작업/작업을 추가 executeContents에 .class.php로() 메소드 : 그렇지 아아

$email = $this->getRequestParameter('email'); 
$this->getRequest()->setParameter('email', $email); 
if (!$this->validateForm()) { 
    $this->redirect($adv_id); // sends me back to the page with the form up above 
} 

내가 이메일 매개 변수가 나타날 것으로 예상하지만 것입니다.
매개 변수, y u 체류하지 않습니까?

답변

1

먼저 요청 매개 변수 소유자를 사용하여 템플릿에 변수를 전달하지 마십시오. 각 템플릿은 컨트롤러에서 지정한 변수를 따라 전달됩니다. 귀하의 작업은 다음과 같아야합니다

// $this->email will be available in the template as $email 
// or $sf_params->get('email') 
$this->email = $this->getRequestParameter('email'); 

if (!$this->validateForm()) { 
    // pass either module/controller and params or route name and params... 
    // just like link_to() helper function 
    $this->redirect('@route_name?id='.$adv_id); 

} 

을 당신은 아마 대신 리디렉션의하고 싶은 그러나 어떤 것은 그렇지 게시물 데이터가 늘 이월 양식을 렌더링 작업을 다시 전달하는 것입니다 $this->forward('module', 'action'); 이유 redirectheader('Location: ...')과 같습니다. 완전히 새로운 요청을 만듭니다. 한편 forward은 다른 모듈/작업에 동일한 요청을 보내기 만하므로 모든 요청 매개 변수는 $_GET$_POST으로 이월됩니다. 이에 대한 자세한 내용은 설명서의 Inside the Controller Layer 섹션을 참조하십시오.

이제 변수가 표시되지 않는 이유는 $sf_params이 요청의 템플릿 매개 변수 소유자가 아니기 때문입니다. 요청의 매개 변수 소유자를 얻으려면 템플릿에서 $sf_request을 사용하십시오. 이에 대한 자세한 내용은 설명서의 The Basics of Page Creation: Passing Information from the Action to the Template 하위 섹션을 참조하십시오.

현재 1.0의 전체 설명서를 찾을 수 있습니다 최고 The Definitive Guide to Symfony

+0

을! 정확히 내가 알 필요가있는 것. 고맙습니다. – blurmy23

관련 문제