2012-05-03 2 views
4

아래 코드를 사용하여 컨트롤러 동작의 페이지를 렌더링했습니다.젠드 프레임 워크 2에서 페이지를 렌더링하는 방법은 무엇입니까?

public function userinforeceiveAction() 
{ 
    $renderer = new PhpRenderer(); 

    $map = new Resolver\TemplateMapResolver(array(
    'userinfo' => __DIR__ . '/userinfo.phtml', 
     )); 

     $resolver = new Resolver\TemplateMapResolver($map); 
     $renderer->setResolver($resolver); 
     $model = new ViewModel(); 
     $model->setTemplate('userinfo'); 

     return new ViewModel();  
} 

및 뷰의 내용을 에코 렌더링합니다.

echo $renderer->render($model); 

그러나 아무것도 렌더링하지 않습니다. 도와주세요. 감사. 그리고이 두 줄로 zf1을 사용하여 잘 작동합니다.

$this->userinfoAction(); 
$this->$render('userinfo'); 

답변

2

에서 구성해야 광부를 다음과 같이 작동하는 것은

public function userinforeceiveAction() 
{ 
    $renderer = new PhpRenderer(); 

    $map = new Resolver\TemplateMapResolver(array(
    // first mistake 
    // __DIR__ is the directory of application controller, not the path of views 
    // second mistake 
    // 'userinfo' should be '(controller)/(action)' 
    'userinfo' => __DIR__ . '/userinfo.phtml', 
     )); 

     // third mistake 
     // since $map is a resolver instance, this is wrong 
     $resolver = new Resolver\TemplateMapResolver($map); // no need 
     $renderer->setResolver($resolver); 
     // should be $renderer->setResolver($map); 
     $model = new ViewModel(); 
     // 'userinfo' should be changed 
     $model->setTemplate('userinfo'); 

     // big mistake 
     // what you are returning here is new instance of view model 
     return new ViewModel(); 
     // instead you should return $model 
} 

에게 더보기

echo $renderer->render($model); 

에서이 라인을 필요로하지만 최선을 변경하지 않고 방법은 말했다 Adam로, 모듈 구성 파일을 통해 주입하는 것이 좋습니다

documentation은 더 나은 설명을 제공 할 것입니다.

1

당신은 MVC 환경에서 물건을 렌더링하는 방법에 skeleton application 좀보고 할 수 있습니다.

기본적으로 올바른 방법을 사용하고 있습니다. 그런데 왜 렌더러와 리졸버를 사용하지 않고 렌더러를 만들고 있습니까? 나는 렌더링 전략과 템플릿을 설정하는 것 같습니까? 이것은 컨트롤러에서하지만 애플리케이션/모듈의 설정에서 할 수있는 것이 아닙니다.

한편, 렌더러의 결과를 뷰에 에코하지 않습니다. 렌더러는 뷰의 결과를 반환합니다. 그러면 뷰의 결과가 응용 프로그램에서 에코됩니다 (이 작업을 수행하지 마십시오. 혼자서).

+0

더 많은 것을 도울 수 있습니다. 나는 그렇게 많이 이해하지 못했다. –

+0

그런 다음 질문에 좀 더 구체적으로 설명하고 설명서를 읽고 실행하고 골격 응용 프로그램을 사용해보십시오. – Fge

9

당신이 단지 뷰 모델 인스턴스를 반환, 자신의 뷰 렌더링을 인스턴스화 할 필요가 없습니다하고 나머지 처리 소요됩니다 ZF2 MVC 층을 사용하는 경우 : 방법의 예를 들어

public function userinforeceiveAction() 
{ 
    $vm = new ViewModel(); 
    $vm->setTemplate('userinfo'); 
    return $vm; 
} 

을 사용하는 뷰 모델은 Akrabat의 ZF2TestApp 참조 : http://zf2test.akrabat.com/

연관된 ZF2 코드는 해당 페이지의 하단 및 서식지도에 링크되어 당신이 수행 한 사실은 무엇을 module configuration file