日期:2014-05-20  浏览次数:20931 次

Zend Framework User Guide -- Modules

 Modules 章节【原文地址:http://framework.zend.com/manual/2.1/en/user-guide/modules.html】

      我们所有的代码都将放在专辑(Album)的moudle中,包括controller, models, forms,views和configuration. 我们会根据要求对应用程序的module稍做改动。

      让我们从目录开始吧。

     创建专辑(Album)module

       在module下面创建一个专辑(Album)目录,其它module的文件按照下面所示的子目录呈列:

zf2-tutorial/
    /module
        /Album
            /config
            /src
                /Album
                    /Controller
                    /Form
                    /Model
            /view
                /album
                    /album

       就如你所看到的,在专辑(Album)module下面为不同的文件分出了很多子目录。在src/Album目录下面的PHP文件中包含的类,可以根据需要拥有很多命名空间,不过这些命名空间都包含在Album命名空间下。View目录页包含一个叫Album的子文件夹,用来放置view脚本。

       为了加载和配置一个module,Zend Framework 2 有一个 ModuleManger. 它将会在moudle目录(module/Album)下寻找包含一个叫Album\Module类的Module.php文件。换言之,这个module类的命名空间就是module的名字,即module的目录名。

      在zf2-tutorial/module/Album下创建一个Module.php文件:

     

<?php
namespace Album;

class Module
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

         ModuleManager将会自动调用方法getAutoLoaderConfig()和getConfig()。

Autoloading files

这一节我还不太了解用法,暂时保存创建时默认的值就好,所以这段我也先跳过不翻译了。

配置(Configuration)

        在注册完autoloader后,让我们来快速看下Album\Module中的getConfig()方法,这个方法仅仅是用来加载config\module.config.php文件的。

        在zf2-tutorial/module/Album/config下创建一个叫做module.config.php的文件:

<?php
return array(
    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            'album' => __DIR__ . '/../view',
        ),
    ),
);

       这个配置信息将会有ServiceManager传递给相应的组件。我们最初需要提供两个部分:controllers 和 view_manager. controllers部分需要列出moudle下面的所有controller。这里我们需要一个AlbumController.引用自Album\Controller\Album. 这个controller的名字必须是所有module下唯一的,所以我们在它前面添加了module名字作为前缀。

       在view_manager部分,我们给TemplatePathStack赋值为view的目录,这将帮助它为Album module找到存放在view/目录下的视图脚本。

告知应用程序我们新的module

        现在我们需要告诉ModuleManager这个新的module的存在。这一工作将由skeleton应用程序提供的config/application.config.php文件来完成。修改这个文件的modules部分来包含Album module, 修改后的文件如下所示:

(修改的部分添加了注释且高亮)

<?php
return array(
    'modules' => array(
        'Application',
        'Album',                  // <-- Add this line
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);

        就如你所见,我们把Album module添加在了Applicaiton moudle的后面。

        现在我们已经创建好了一个module, 可以往里面添加我们的代码了。