使用Zend Framework 2布局。默认布局

时间:2014-04-06 00:49:56

标签: layout zend-framework2

我开始使用已配置的模块Common:

<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Common\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        ),
    ),
    'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Common\Controller\Index' => 'Common\Controller\IndexController'
        ),
    ),
    'view_helpers' => array(
        'invokables' => array(
            'flashMessengerHelper' => 'Common\View\Helper\FlashMessenger',
        ),
    ),
    'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

该模块包含: ZF2客户端\模块\共同\视图\布局\ layout.phtml

当我访问路线时,我会看到一个页面并加载了布局。我有另一个模块Wall,它已配置:

    <?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

return array(
    'router' => array(
        'routes' => array(
            'wall' => array(
                'type' => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'    => '/:username',
                    'constraints' => array(
                        'username' => '\w+'
                    ),
                    'defaults' => array(
                        'controller' => 'Wall\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            )
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Wall\Controller\Index' => 'Wall\Controller\IndexController'
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

当我访问路线'/:username'时,我注意到Common模块中描述的布局会自动加载。 Wall模块如何知道从常见加载布局? Wall模块在其视图文件夹中不包含任何布局,但似乎从Common加载了一个。如果在Zend的网站上有任何描述布局系统功能的文档,我还无法将其挖掘出来。 Wall或Common的控制器中没有任何内容表示正在设置模板。因此,控制器代码中没有setTemplate。

感谢您发帖...

1 个答案:

答案 0 :(得分:3)

您发布的配置是向视图管理器的模板路径堆栈添加两条路径:zf2-client\module\Common\viewzf2-client\module\Wall\view。默认情况下,ZF2会查找要呈现的名为layout/layout的视图。它将检查视图堆栈中的匹配文件。由于您的公共模块中只有其中一个,而且它是使用的。