4

以下のコードを使用して、コントローラー アクションでページをレンダリングしました。

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);

しかし、それは何もレンダリングしません。私を助けてください。ありがとう。また、この 2 行で zf1 との連携も良好です。

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

3 に答える 3

9

ZF2 MVC レイヤーを使用している場合は、独自のビュー レンダリングをインスタンス化する必要はありません。ViewModel インスタンスを返すだけで、残りは処理されます。

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

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

関連する ZF2 コードはそのページの下部にリンクされており、テンプレート マップはモジュール構成ファイルで構成されています。

于 2012-06-27T12:41:55.743 に答える
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);

しかし、アダムが言ったように、モジュール構成ファイルを介して注入することが最善かつ推奨される方法です

ドキュメントはより良い説明を提供します

于 2012-07-09T17:29:26.523 に答える
1

MVC環境でレンダリングする方法については、スケルトンアプリケーションを確認することをお勧めします。

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

一方、ビュー内のレンダラーの結果をエコーすることはありません。レンダラーはビューの結果を返し、アプリケーションによってエコーされます(これは自分で行いません)。

于 2012-05-03T08:30:26.277 に答える