4

Admin と Login の 2 つのモジュールがあります。

管理ビュー「index.html」内にログインビュー「login.phtml」を表示したい

管理モジュールのindexActionコントローラーに次のものがあります

public function indexAction()
{    
    $login = new LoginController();

    $view = new ViewModel(array(
        'theloginform' => $login->loginAction(),
    ));

    return $view;
}

Login コントローラーの LoginAction メソッドで、「login.phtml」ファイルの ViewModel を返します。

public function LoginAction() {
       $view = new ViewModel();
       return $view;
}

変数「theloginform」がオブジェクトであるため、indexAction はエラーをスローします。

Catchable fatal error: Object of class Zend\View\Model\ViewModel could not be converted to string in...

次を追加すると:

$authentication->loginAction()->captureTo('test')

「index.phtml」は文字列「content」を示しています。

ビュー変数 'theloginform' に割り当てる前に ViewModel をレンダリングする必要があるかもしれないことを読みましたが、それを機能させることができないようです。

public function LoginAction() {

    $view = new ViewModel();

    $renderer = new PhpRenderer();
    $resolver = new Resolver\AggregateResolver();
    $map = new Resolver\TemplateMapResolver(array(
            'login'      => __DIR__ . '/../view/login.phtml'

    ));
    $resolver->attach($map);
    $view->setTemplate("login");
    return $renderer->render($view);
}

次のエラーが発生した場合:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "login"; resolver could not resolve to a file

autoload_classmap.php ファイルに DI を追加しようとしましたが、それでも同じエラーが発生します。login.phtml ファイルが正しいパスにあることを再確認しました。

「/Login/view/login/login/login.phtml」「/Login/src/Login/view/login.phtml」にコピーしました

非常に混乱して、Zend のドキュメントを読んでから読み直しました。ビューを別のビューに渡したいだけです...

4

4 に答える 4

4

このzf2ドキュメンテーションページに従って

これをログイン アクションに記述します。

    public function loginAction()
    {
        return new ViewModel();
    }

そして indexAction で:

    $view = new ViewModel(
                  array(
                    //here any thig you want to assign to index view
                  )
                );
    $loginView = new ViewModel(
                  array(
                        //here any thig you want to assign to login view
                    )
                );


    $loginView->setTemplate('moduleName/controllerName/login'); 

    $view->addChild($loginView, 'login');
    return $view

<? echo $this->login ?>index.phtml では、loginView を表示したい場所でログインをエコーするだけです。

于 2013-06-05T10:33:56.093 に答える
4

一部のビュー コンテンツを共有する必要がある場合は、パーシャルを使用できます。

$this->partial('partial/login.pthml', array()); //add this to your index view

ここでそれらについて読むことができます

また、役立つ情報がいくつか見つかるかもしれません: Zend Framework 2 はモジュール内でパーシャルをどのようにレンダリングしますか?

于 2012-10-05T10:13:43.020 に答える
1

ZF 1.xでは、ビュープレースホルダーまたはフォームロジックのloginActionを呼び出すコントローラープラグインを参照するアクションヘルパーを作成することをお勧めします。

Zf2では、アクションヘルパーがコントローラープラグインに置き換えられ、イベントマネージャーを介してトリガーされているように見え、1つ以上の「マネージャー」を認識する必要がある場合があります。ただし、プレースホルダービューヘルパーはまだ存在しており、多少馴染みがあるようです。

ログインフォームを表示するためのコントローラープラグインの構築/適応を検討することをお勧めします。このプラグインは、プレースホルダービューヘルパーにアタッチできます。運が良ければ、ビューヘルパーだけで必要な機能を利用できるかもしれません。

もっと助けられたらいいのにと思いますが、私はまだこの混乱を乗り越えています。

幸運を。

于 2012-10-06T06:51:00.547 に答える
1

管理ビューでは、レンダー ビュー ヘルパーを使用し、レンダリングされたスクリプトをエコーする必要があるため、次のことができます。 echo $this->render($this->theloginform);

于 2013-05-24T17:47:16.867 に答える