4

EdpModuleLayouts モジュールに問題があります。Module.php を module/EdpModuleLayouts/ ディレクトリに次の内容で配置します。

<?php
namespace EdpModuleLayouts;

class Module {

public function onBootstrap($e) {
    $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
                $controller = $e->getTarget();
                $controllerClass = get_class($controller);
                $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
                $config = $e->getApplication()->getServiceManager()->get('config');
                if (isset($config['module_layouts'][$moduleNamespace])) {
                    $controller->layout($config['module_layouts'][$moduleNamespace]);
                }
            }, 100);
    }
}

config/application.config.php にも登録しました。

return array(
'modules' => array(
    'EdpModuleLayouts',
    'Main',
    'Administrator',
    'Object'
),
'module_layouts' => array(
    'Main' => 'layout/main',
    'Administrator' => 'layout/admin',
),
'module_listener_options' => array(
    'module_paths' => array(
        './module',
    ),
    'config_glob_paths' => array(
        'config/autoload/{,*.}{global,local}.php',
    ),
),
);

「メイン」モジュールの構成は次のようになります。

<?php
return array(
'router' => array(
    'routes' => array(
        'Main' => array(
            'type' => 'Literal',
            'options' => array(
                'route' => '/main',
                'defaults' => array(
                    '__NAMESPACE__' => 'Main\Controller',
                    'controller' => 'Index',
                    'action' => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'default' => array(
                    'type' => 'Segment',
                    'options' => array(
                        'route' => '[/:controller][/:action][/:id]',
                        'constraints' => array(
                            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id' => '[0-9]*',
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),
            ),
        ),
    ),
),
'service_manager' => array(
    'factories' => array(),
),
'controllers' => array(
    'invokables' => array(
        'Main\Controller\Index' => 'Main\Controller\EmailController',
        'Main\Controller\Error' => 'Main\Controller\ErrorController',
        'Main\Controller\FAQ' => 'Main\Controller\FAQController',
        'Main\Controller\Index' => 'Main\Controller\IndexController',
        'Main\Controller\Pages' => 'Main\Controller\PagesController',
        'Main\Controller\Settings' => 'Main\Controller\SettingsController',
        'Main\Controller\User' => 'Main\Controller\UserController',
    ),
),
'view_manager' => array(
    'template_map' => array(
        'layout/main' => __DIR__ . '/../view/layout/main_layout.phtml',
        'layout/header' => __DIR__ . '/../view/layout/main_header.phtml',
        'layout/footer' => __DIR__ . '/../view/layout/main_footer.phtml',
        'index/index' => __DIR__ . '/../view/index/index.phtml',
        'error/404' => __DIR__ . '/../view/error/404.phtml',
        'error/index' => __DIR__ . '/../view/error/index.phtml',
    ),
    'template_path_stack' => array(
        __DIR__ . '/../view',
    ),
    'display_exceptions' => true,
    'exception_template' => 'error/index',
    'display_not_found_reason' => true,
    'not_found_template' => 'error/404',
),
);

しかし、アプリケーション内の必要なモジュールにアクセスすると、例外がスローされます。

( ! ) 致命的なエラー: キャッチされない例外 'Zend\View\Exception\RuntimeException' とメッセージ 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "layout/layout"; リゾルバーは、461 行目の D:\WebServer\www\homepage\vendor\library\Zend\View\Renderer\PhpRenderer.php のファイルに解決できませんでした ( ! ) Zend\View\Exception\RuntimeException: Zend\View\Renderer \PhpRenderer::render: テンプレート "layout/layout" をレンダリングできません。リゾルバーは、461 行目の D:\WebServer\www\homepage\vendor\library\Zend\View\Renderer\PhpRenderer.php のファイルに解決できませんでした

どういう理由ですか?

4

3 に答える 3

5

ZF2 の新参者として、EdpModuleLayouts モジュールを機能させるのにしばらく時間がかかりました。重要なのは、「view_manager」と「template_map」の設定を構成することです。構成サンプルについては、http://www.webtrafficexchange.com/zf2-configure-layout-each-module-edpmodulelayoutsにアクセスしてください。

于 2013-05-20T17:25:49.740 に答える
1

これが行っていることは、適切なレイアウトを設定することだけです。

controller->layout($config['module_layouts'][$moduleNamespace]);

エラー メッセージは、設定しようとしているテンプレートが見つからなかったことを示しています。テンプレート マップでレイアウトを構成する必要があります。これは私のプロジェクトの例です。

'view_manager' => array(
    'template_map' => array(
        'cms-admin/admin/dashboard'  => __DIR__ . '/../view/cms-admin/admin/dashboard.phtml',
        'cms-admin/login/login'      => __DIR__ . '/../view/cms-admin/login/login.phtml',
        'cms-admin/users/index'      => __DIR__ . '/../view/cms-admin/admin/users/index.phtml'
    )
),

'module_layouts' => array(
    'CmsAdmin'   => 'layout/admin-layout',
),
于 2014-06-04T13:28:25.777 に答える
-1

if (isset($config['module_layouts'][$moduleNamespace])) は true と評価されますか? オプションmodule_layoutsはconfigディレクトリにあるはずだと思います:

./config/layouts.config.glob.php:

<?php
    return array(
        'module_layouts' => array(
            'Main' => 'layout/main',
            'Administrator' => 'layout/admin',
        ),
    );
?>

試してみませんか?

于 2013-03-07T14:46:07.020 に答える