菜菜鸟Zend Framework 2 不完全学习涂鸦(四)-- 模块

菜菜鸟Zend Framework 2 不完全学习涂鸦(四)-- 模块

这是涂鸦的第四篇

模块(Modules)

ZF2 是一个模块系统,而你需要在每个模块中组织你主要应用代码。由模板(skeleton)所提供的应用程序模块在整个应用程序中被用作引导(bootstrapping),错误(error)和路由设置(routing configuration)。它经常被用作提供应用级别控制,例如,应用程序的首页。但是在这个教程中我们不使用默认的模块,我们将使用唱片列表来作为应用程序的首页。

我们将代码放入唱片模块(Album Module)中,其中包含了控制台(Controller),模式(Models),表单(Form)和视图(View),当然也包含配置。

我们首先来设置必要的目录结构

一、设置唱片模块(Album Module)

首先在 module 目录下建立 Ablum 的子目录用于存放模块文件,构建前后目录对比如下图

整个 Album 目录如下

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

我们将不同类型的文件保存在唱片模块(Album Module)下的不同目录里面。在 src/Ablum 目录下的 PHP 文件中所定义的类都是在名为 Album 的命名空间里,这样我们可以根据需要定义多个命名空间。在 view 目录下也有一个 album 子目录来存放视图文件。

ZF2 有一个模块管理器(ModuleManager),用来调用和配置模块。模块管理器在模块起始目录(module/Album)中查找 Module.php,找到以后再查找一个叫 Album\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()。

二、自动调用文件

getAutoloaderConfig() 返回一个与 ZF2 AutoloaderFactory 相兼容的数组。我们在 ClassMapAutoloader 里添加一个类地图文件(class map file)同时在 StandardAutoloader 中添加模块的命名空间。标准的自动调用器需要一个命名空间以及一个可以找到那个命名空间文件的路径。这样的结构符合PSR-0规则。

在本教程的开发过程中,我们不需要通过 classmap 来调用文件,所以我们在 classmap 自动调用器中设定一个空数组,步骤如下:

1、在 zf2-tutorial/module/Album 目录下新建一个 PHP 文件,并命名为:autoload_classmap.php

2、输入以下代码

<?php
return array();

当自动调用器(autoloader)在查找与 Ablum 命名空间相对应的类时,这个空数组将会返回给 StandardAutoloader。

注意:

如果是使用 composer,你可以在 composer.json 中创建一个空函数 getAutoloaderConfig() { } 来代替以上步骤

"autoload": {
    "psr-0": { "Album": "module/Album/src/" }
},

如果你采用这种方法,你需要执行

php composer.phar update

命令来更新 composer 自动调用文件。

三、配置

注册完成自动调用器(autoloader)之后,我们快速浏览一下在 Album\Module 下的 getConfig() 方法,这个方法只是简单的调用了 config/module.config.php 文件。

在 zf2-tutorial/module/Album/config 目录下创建一个新PHP文件并命名为: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。

controller 字段包含了所有模块提供的控制器(controller),这里我们只需要一个在 Album\Controller\Album 中的控制器:AlbumController。控制器主键必须是唯一的,所以我们在模块名称前添加了前缀

在 view_manager 字段中我们在 TemplatePathStack 中指定了视图(view)所在目录路径,这样 Ablum 模块就可以在 view/ 目录下找到 view 的代码。

四、关于应用程序新模块的有关信息

下面介绍一下模块管理器(ModuleManager)。模板提供了 config/application.config.php 文件,将“Ablum”模块添加到这个文件的 modules 字段,代码如下:

<?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‘,
        ),
    ),
);

我们在“modules”字段下紧接着“Application”添加了“Album”

现在我们已经准备好输入我们自己的代码了。

-------------------------------------------------------------------------------------

2013-07-26补充

五、有关application.config.php的信息

application.config.php 文件是模板(Skeleton)自带的一个应用程序配置文件,保存路径是zf2-tutorial\module\Album\config\。这个配置文件直接返回一个数组,默认有三个关键字(Key),分别是:modules,module_listener_options 和 service_manager。

1、modules

modules 也是一个数组,保存的是应用程序所使用到的命名空间。例如,Album

‘modules‘ => array(
    ‘Application‘,
    ‘Album‘
),

2、module_listener_options

module_listener_options 同样是一个数组,保存的是许多有关模块管理器(ModuleManager)的监听器的选项。下面来看看每个关键字(Key)所代表的意思

(1)module_paths

这个关键字指向一个数组,这个数组包含了模块(Module)所在的路径。如果我们设定了一个模块的路径,监听器(listener)就会注意到这个模块的命名空间。这个设定的路径是指向模块(Module)的模块类(module class)

‘module_paths‘ => array(
    ‘./module‘,
    ‘./vendor‘,
),

在上例中“./module”是我们创建的模块(Module)保存的路径,“./vendor”是ZF2类库所在的路径。

(2)config_glob_paths

这个关键字指向一个数组,这个数组包含了在模块(module)调用以后全局配置文件所在的路径。这个配置文件可以轻松的被模块(Module)自己的配置所覆盖。路径可以使用 GLOB_BRACE 符号

‘config_glob_paths‘ => array(
    ‘config/autoload/{,*.}{global,local}.php‘,
),

上例中的路径是说全局配置文件在 config/autoload/ 目录下,以 global 或者 local 结尾的 php 文件。在默认的模板( S k e l e t o n )中,这个文件是 zf2-tutorial/config/autoload/global.php

(3)config_cache_enabled

是否允许配置缓存。如果允许,合并后的配置信息会被缓存并在今后的请求中使用。默认是不允许使用缓存

//‘config_cache_enabled‘ => $booleanValue,

(4)config_cache_key

这个关键字被用作创建配置信息缓存文件名,默认不启用

//‘config_cache_key‘ => $stringKey,

(5)module_map_cache_enabled

是否允许模块(Module)类地图缓存。如果允许,会建立一个模板类地图缓存给今后的请求使用,目的是为了减少自动调用(autoloading)的过程,默认是不允许使用

//‘module_map_cache_enabled‘ => $booleanValue,

(6)module_map_cache_key

这个关键字被用作创建模板类地图缓存文件名,默认不启用

//‘module_map_cache_key‘ => $stringKey,

(7)cache_dir

合并配置信息后缓存保存的路径,默认不使用

//‘cache_dir‘ => $stringPath,

(8)check_dependencies

是否允许使用模块(Module)依赖性检查。默认允许,防止使用有依赖关系额模块(Module)但是没有被调用

// ‘check_dependencies‘ => true,

3、以前创建一个自己的服务管理器(Service Manager)。可能包含一个或多个子数组

//‘service_listener_options‘ => array(
//     array(
//         ‘service_manager‘ => $stringServiceManagerName,
//         ‘config_key‘      => $stringConfigKey,
//         ‘interface‘       => $stringOptionalInterface,
//         ‘method‘          => $stringRequiredMethodName,
//     ),
// )

4、初始化服务管理器(ServiceManager),这将和 Zend\ServiceManager\Config 保持一致

// ‘service_manager‘ => array(),

未完待续...谢谢

时间: 2024-10-13 02:42:53

菜菜鸟Zend Framework 2 不完全学习涂鸦(四)-- 模块的相关文章

菜菜鸟Zend Framework 2 不完全学习涂鸦(三)-- 例子功能设置

菜菜鸟Zend Framework 2 不完全学习涂鸦(三)-- 例子功能设置 这是涂鸦的第三篇,主要介绍一下ZF官网教程中所涉及的一些数据库方面的设置. 官网的教程时构建一个唱片的目录系统,包括唱片列表,增,删,改唱片信息. 注意:在开始教程之前,请确认: 1.是否已经打开了mod_rewrite功能 2.是否已经支持了 .htaccess 否则您除了访问首页之外将不能访问任何页面 一.系统功能设置 页面名称 页面功能说明 唱片列表(List of albums) 显示已有的所有唱片列表,同时

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

zend framework框架学习走起——从零开始,点击记录-安装

zend framework第一步,先来安装下zend framework框架. 先介绍下,我这边的php配置环境,为图省事,我是安装wampserver来搭载php环境的,,php+Apache+mysql一下子全部搞定.所以我们的zendframwok框架安装所在文件夹就是在wampserver的www文件夹下. 我们要先去下载下来zend framework框架. 进入zend framework官网,你可以直接下载zend framework框架,也可以和我一样,选择composer方式

zend framework学习笔记(windows下)

zend framework安装 下载地址:https://framework.zend.com/downloads/archives 修改php.ini文件,将library目录添加到include_path路径中 *如没有权限修改php.ini文件,可以创建.htaccess文件中,在文件中添加php_value include_path ".;library路径",将该文件放在服务器的文档根目录 配置 ①将 php.exe目录添加到系统环境变量中 将zend framework目

T4模板之菜菜鸟篇

一.废话 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎.在 Visual Studio 中,“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件. 在 Visual C# 或 Visual Basic 中,控制逻辑编写为程序代码的片段.生成的文件可以是任何类型的文本,例如网页.资源文件或任何语言的程序源代码.现在的VS中只要与代码生成相关的场景基本上都能找T4的身影,

【原创】Zend Framework 2框架之MVC

ZendFramework 2框架之MVC 作者:sys(360电商技术组) 1.前言 Zend Framework 2是zend官方推出的php开源框架,基于php5.3.他全然採用面向对象的代码实现,并利用了php5.3的一些新特性,比方命名空间.闭包等.由于是官方的推荐的,今天我们就来学习学习Zend Framework 2,由于本人知识浅薄,也没有实际的用Zend Framework 2做项目开发的经验.有错误的地方还请大家指正,也希望在后面的开发中能用用该框架,此篇文章权当抛砖引玉.

Zend Framework 2 获取 Service Manager

在学习zend framework的时候很多的问题只能看源代码,为了加深自己的理解,记录下来平时用到的方法: 1在控制器里 $serviceLocator = $this->getServiceLocator(); 2在Module.php里 namespace ModuleName; use Zend\Mvc\MvcEvent; class Module { public function onBootstrap(MvcEvent $e) { $serviceLocator = $e->ge

在wamp5下配置zend framework有错误!

我是看IT界视频学习Zend framework,配置时出现了下面的错误,希望那位大虾指点下?index.php 错误提示:Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (index.php)' in F:\local_www\zendframework\library\Zend\Controller\Dispatc

zend framework多模块多Layout配置

转自: http://blog.csdn.net/a82168506/article/details/10228011 上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资料,为了避免此种情况再次发生,做个记录吧. 首先,我们要新建一个ZF项目,目录结构如下. 我们想要配置多模块呢,首先要在,application下面建一个modules文件夹,然后