ZF2.0用户向导 —— 4. 模块

ZF 2 使用模块系统并且你可以将你的主要的应用代码放到每个模块中。主框架(skeleton)提供应用模块的启动,错误及路由配置。同时它一般被用来提供应用级的控制,例如应用的首页,但是在此篇教程中我们并不打算使用默认的控制器,因为我们需要在首页显示封面列表。

 

我们将会在Album模块中包含我们用到的所以代码,其中包括models,forms及views,以及配置。如有需要我们也会微调一下应用模块。

 

现在就让我们从需要的文件夹开始吧。

 

创建Album模块

 

zf2-tutorial/

    /module

        /Album

            /config

            /src

                /Album

                    /Controller

                    /Form

                    /Model

            /view

                /album

                    /album

 

在eclipse中的文件夹结构大致如下:

 

 

 

译者注:

上面的根目录原文是 zf2-tutorial/,因为我的项目是src,所以注意下原文中为 zf2-tutorial/。

   

就像你看到的Alum模块有很多子目录及很多不同类型的文件组成。在 src/Album目录中包括很多以 Album 命名空间的类文件以便在我们的模块中存在很多各种不同的命名空间。而 view 文件夹是被我们称为模块的显示层脚本。

 

为了能够加载及配置一个模块,ZF 2有个模块管理器。它会查询 位于模块根目录(module/album)下的Module.php文件,同时能够找到被称为 Album\Module 的类。也就是说,在一个给出的模块中这些类都有模块的命名空间,即模块所在的文件夹。

 

在 Album 模块中创建 Module.php 文件如下:

 

// module/Album/Module.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() 方法。

 

自动加载文件

 

我们的 getAutoloaderConfig() 方法返回一个 ZF 2 自动加载工厂组件的数组。我们配置它以便能够添加类映射文件到 ClassmapAutoloader  同时也添加模块的命名空间到 StandardAutoloader。标准的自动加载需要命名空间以及路径以便能够找到命名空间对应的文件。它是遵从 PSR-0 协议以便类映射到文件。

 

在实际开发中,我们不需要通过类映射加载文件,所以我们一般都提供一个空的数组进行类映射自动加载。创建 自动加载类映射文件的内容如下:

 

// module/Album/autoload_classmap.php:

return array();

 

这里的空数组,自动加载器会在 Album 命名空间查找类,它会为我们重新回到标准加载器。

 

注意

如果我们正在使用 Composer 作为替换,你不能实现 getAutoloaderConfig() 而是在 composer.json 中添加 " Application ":" module/Application/src" 以符合 psr-0。如果你这么做,你需要执行 php composer.phar 以升级 composer 自动加载文件。

 

配置

 

当注册完自动加载器后,让我们很快的了解下位于 Album\Module 中的 getConfig() 方法。此方法很容易的加载了 config/module.config.php 文件。

 

为 Album 模块创建了如下的配置文件:

 

// module/Album/config/module.config.php:

return array(

    'controllers' => array(

        'invokables' => array(

            'Album\Controller\Album' => 'Album\Controller\AlbumController',

        ),

    ),

    'view_manager' => array(

        'template_path_stack' => array(

            'album' => __DIR__ . '/../view',

        ),

    ),

);

 

通过 ServiceManager 配置文件的信息关联到了相关的组件。我们需要2个初始化部分:控制器和视图管理。控制器部分提供由模块提供的所有控制。我们需要一个控制器 —— AlbumController ,类似如 Album\Controller\Album。此控制器key值对于所有模块来说应该是唯一的。所以我们会在名称前加上模块名称前缀。

 

在视图管理部分,我们添加我们的视图文件夹到 TemplatePathStack 配置部分。它可以让系统能够在我们的 view/ 文件夹下找到 Album 模块需要的视图脚本。

 

关于我们新的模块通知给应用

 

我们现在需要告知模块管理器 (ModuleManager)现在存在新的模块。在(skeleton application)骨干应用的 config/application.config.php 中存在这样的配置。更新这个文件以便让它的模块部分也包含 Album 模块,所以现在这个文件看起来如下:

 

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 模块在 Application 模块之后。

我们现在就建立了模块以准备将我们自定义的代码放进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值