2016-10-13 23 views
1

本当に変わったことが起こっています。私はApplicationと呼ばれる2つのモジュールと、Dashboardと呼ばれるもう1つのモジュールを持っています。それらは異なっており、お互いに関係ありません。私はそれらの一つ一つにPHTMLレイアウトを使用していた、それは私がやったことです:異なるモジュールの異なるレイアウト

module/Application/config/module.config.php

// ... 

'view_manager' => [ 
    'display_not_found_reason' => true, 
    'display_exceptions'  => true, 
    'doctype'     => 'HTML5', 
    'not_found_template'  => 'error/404', 
    'exception_template'  => 'error/index', 
    'template_map' => [ 
     'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
     'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
     'error/404'    => __DIR__ . '/../view/error/404.phtml', 
     'error/index'    => __DIR__ . '/../view/error/index.phtml', 
    ], 
    'template_path_stack' => [ 
     __DIR__ . '/../view', 
    ], 
], 

module/Dashboard/config/module.config.php

// ... 

'view_manager' => [ 
    'doctype' => 'HTML5', 
    'template_map' => [ 
     'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
     'dashboard/index/index' => __DIR__ . '/../view/dashboard/index/index.phtml', 
     'error/404'    => __DIR__ . '/../view/error/404.phtml', 
     'error/index'    => __DIR__ . '/../view/error/index.phtml', 
    ], 
    'template_path_stack' => [ 
     __DIR__ . '/../view', 
    ], 
], 

私が作成した2つの分離レイアウト、1 module/Application/view/layout/layout.phtmlで、もう1つはmodule/Dashboard/view/layout/layout.phtmlで、論理的には動作する必要がありましたが、Applicationの場合でも常にDashboardというレイアウトを呼び出します。 私は、各モジュールに分割されたレイアウトを使用する方法が不思議でしたか?

+0

これは役に立ちます - > http://stackoverflow.com/questions/16054191/apply-a-module-layout-to-zfcuser/16057207#16057207 – Crisp

答えて

1

以前のZF2プロジェクトで同じ問題が発生しました。問題は、両方のモジュールに同じ「レイアウト/レイアウト」識別子を使用し、設定のマージ中に1つが失われてしまうことです。

アイデアは、識別子に異なる名前を付けることと、レイアウトを変更できる抽象的なコントローラを使用することです。別のを使用して

Module.php(あなたのメインモジュールの)

public function onBootstrap($e) 
{ 
    $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController', 'dispatch', function($e) { 
    $controller = $e->getTarget(); 
    $controllerClass = get_class($controller); 
    $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); 
    $controller->layout($moduleNamespace . '/layout'); 
    }, 100); 
} 

そして、すべてのモジュールのmodule.config.phpで:そしてdispatchイベントに、あなたは、関数ウィッヒは、あなたのモジュールのレイアウトを設定します添付しますレイアウト(例えばダッシュボード):

'view_manager' => array(
    'display_not_found_reason' => true, 
    'display_exceptions'  => true, 
    'doctype'     => 'HTML5', 
    'not_found_template'  => 'error/404', 
    'exception_template'  => 'error/index', 
    'template_map' => array(
     'Dashboard/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
     'Dashboard/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
     'error/404'    => __DIR__ . '/../view/error/404.phtml', 
     'error/index'    => __DIR__ . '/../view/error/index.phtml', 
    ), 
    'template_path_stack' => array(
     __DIR__ . '/../view', 
    ), 
), 

そして、それはOKであるはずです。それ以外の場合は、EdpModuleLayoutsのような他のパーティーコードを使用することもできますが、それ以上のメンテナンスはありません。私の解決策のポイントは、あなたが何をするかを理解することです。

関連する問題