2

私の zendframework 2 アプリケーションには、2 つのコントローラーを含むモジュールがあります。コントローラーのアクションの 1 つに別のレイアウトを設定したいと考えています。モジュール構成ファイル内に設定する方法はありますか?

Ps: 次のコマンドを使用してコントローラーの __CONSTRUCT メソッド内で設定しようとしましたが、うまくいきませんでした!

$event = $this->getEvent();
$event->getViewModel()->setTemplate('layout/MYLAYOUT');

しかし、コントローラーの各アクション内で上記のコマンドを使用すると、正常に動作します。

4

3 に答える 3

3

レイアウト、ビューなどを簡単に調整できるいくつかの優れた方法については、akrabatの例を参照してください。

具体的には、ここで彼のgithubで探しているものを見つけることができます。

代替レイアウトを設定/使用するコントローラーのアクションメソッドのカットペーストは次のとおりです。

public function differentLayoutAction()
{
    // Use a different layout
    $this->layout('layout/different');

    return new ViewModel();
}

編集:akrabatには、と言う例があるようです。これはChange the layout for every action within a module、構成でレイアウトを設定するための最良のポインターを提供する可能性があります。しかし、私はコードを見たばかりで、例は現在未完成であり、レイアウトは変更されていません。

于 2012-10-04T20:36:33.520 に答える
2

現在、サンプル プロジェクトを開くことができないため、正しい方向に向けることができます。Evan Coury が、モジュール固有のレイアウトの方法を投稿しました。次のリンクを参照してください。

Zend Framework 2 のモジュール固有のレイアウト

<?php
namespace MyModule;

use Zend\ModuleManager\ModuleManager;

class Module
{
    public function init(ModuleManager $moduleManager)
    {
        $sharedEvents = $moduleManager->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
            // This event will only be fired when an ActionController under the MyModule namespace is dispatched.
            $controller = $e->getTarget();
            $controller->layout('layout/alternativelayout');
        }, 100);
    }
}

これはどのように役立ちますか?:$controller呼び出されたコントローラーとアクションの両方が保存されている必要があります。呼び出されたアクションを確認し$controllerて、それに応じてレイアウトを割り当てることができると確信しています。

申し訳ありませんが、現時点では方向性を示唆することしかできませんが、これで始めることができると確信しています.

于 2012-10-04T19:10:19.397 に答える
0

@Samの答えは、質問にほとんど答えています。述べたように、どのコントローラーが呼び出されているかを確認するだけで済みます。これは次のように実行できます。

<?php
namespace MyModule;

use Zend\ModuleManager\ModuleManager;

class Module
{
    public function init(ModuleManager $moduleManager){
        $sharedEvents = $moduleManager->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
                $controller = $e->getTarget();
                if ($controller instanceof Controller\AltLayoutController) {
                    $controller->layout('layout/alternativelayout');
                }
            }, 100);
    }

于 2014-01-31T16:12:01.590 に答える