2012-05-03 9 views
4

以下のコードを使用して、コントローラーアクションでページをレンダリングしました。Zend Framework 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();  
} 

とIは、ビュー内のコンテンツをエコーし​​ます。

echo $renderer->render($model); 

ですが、何も表示されません。私を助けてください。ありがとう。 と、この2行でzf1を使ったうまく動作します。

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

答えて

2

に設定されています以下の鉱山労働者との仕事は、ビュー内の行の必要はありませ

echo $renderer->render($model); 

しかし、最善と方法をお勧めしますが Adamとして

と、モジュール構成ファイルを介して注入することであるが

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 
} 

を変更しませんdocumentationはより良い説明を提供します

1

あなたはMVC環境で何かを描画する方法についてskeleton applicationを見てしたい場合があります。

これは主に正しい方法です。しかし、なぜそれを使用せずにレンダラーとリゾルバを作成していますか?私は、レンダリング戦略とテンプレートを設定すると思いますか?コントローラではなく、アプリケーションの/モジュールの設定で行うことは何もありません。

一方、レンダラの結果をビューにエコーしないでください。レンダラはビューの結果を返し、アプリケーションでエコーします(これは実行しません)。自分で)。

+0

何かを助けることができます。私はそれほど理解できませんでした。 –

+0

あなたの質問にはもう少し具体的で、ドキュメントを読んで実行し、スケルトンアプリケーションを試してみるべきです。 – Fge

9

あなたがちょうどViewModelにインスタンスを返し、それは残りの世話をする、独自のビューのレンダリングをインスタンス化する必要はありませんZF2 MVC層を使用している場合:

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

方法の例についてビューモデルを使用することがAkrabatのZF2TestAppを参照してください。http://zf2test.akrabat.com/

あなたがすべきをやっていることに関連するZF2コードは、そのページの下部にリンクされており、テンプレート・マップが実際にmodule configuration file

関連する問題