Zend框架2使用一个模块系统,和你组织内每个你的主应用程序特定代码
模块。骨架提供的应用程序模块是用于提供引导,错误和路由
配置到整个应用程序。它通常是用来提供应用水平控制器,比如说,应用程序的主页,但我们不会使用,因为我们希望在本教程中提供的默认
我们的相册列表的主页,将生活在我们自己的模块。
我们打算把所有的代码到相册模块将包含我们的控制器,模型形式和
意见。我们还需要一些配置文件。我们开始与所需的目录。
设置相册模块
从以下子目录下的所谓专辑举行的模块的文件创建一个目录:

zf2tutorial/
        /modules
            /Album
                /configs
                /src
                    /Album
                        /Controller
                        /Form
                        /Model
                /views

正如你可以看到相册模块为单独的文件,我们会有不同类型的目录。
PHP文件包含专辑命名空间内的类生活,使我们可以在src/Album目录
我们的模块内有多个命名空间,我们应该访问(引用)它。
为了装载和配置模块,Zend框架2 ModuleManager。这将寻找
Module.php模块目录的根,并期望找到一类叫做Album\模块。
也就是说,在一个给定模块的类模块的名字命名空间,这是
模块的目录名称。
创建相册模块Module.php:
modules/Album/Module.php

<?php
namespaceAlbum;
useInvalidArgumentException,
    Zend\Module\Manager,
    Zend\Config\Config,
    Zend\Loader\AutoloaderFactory;
classModule
{
    publicfunction init(Manager $moduleManager)
    {
        $this->initAutoloader();
    }
    protectedfunction initAutoloader()
    {
        AutoloaderFactory::factory(array(
            'Zend\Loader\ClassMapAutoloader'=> array(
                __DIR__ .'/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader'=> array(
                'namespaces'=> array(
                    __NAMESPACE__ => __DIR__ .'/src/'. __NAMESPACE__,                ),
            ),
        ));
    }
    publicfunction getConfig($env =null)
    {
        $config =newConfig(include __DIR__ .'/configs/module.config.php');
        if(null=== $env){
            return $config;
        }
        if(!isset($config->{$env})){
            thrownewInvalidArgumentException(sprintf(
                'Unknown environment "%s" provided to "%s\\%s"',
                $env,
                __NAMESPACE__,
                __METHOD__
            ));
        }
        return $config->{$env};
    }
}
?>

ModuleManager会调用的init(),我们按照惯例,应配置此自动装载
模块。我们创建initAutoloader()为我们做的方法。
自动加载文件
我们使用ZF2的AutoloaderFactory添加一个classmap文件的ClassmapAutoloader同时这个
模块的命名空间,已为我们创造了在index.php StandardAutoloader。标准
自动加载请求需要一个命名空间和路径在哪里可以找到该命名空间的文件。它是PSR- 0
兼容等类的直接映射到每对PSR-0 rules1文件。
正如我们在发展,我们不需要通过classmap加载文件,所以我们提供了一个空数组给
classmap自动加载类。创建这些内容autoload_classmap.php:
modules/Album/autoload_classmap.php:

<?php
return array();
?>

由于这是一个空数组,每当自动加载类通过相册命名空间来查找一个类, 它会把我们退回到
这里StandardAutoloader。

配置
经注册的自动加载机,让我们在快看在Album\Module中的getConfig()。
这个方法实例化一个Zend\ Config中加载CONFIGS/ module.config.php文件。并抛出一个
如果配置错误,没有在指定的环境。然后我们回到正确的配置对象。
相册模块创建以下配置文件:
1 https://gist.github.com/1293323modules/Album/configs/module.config.php:

<?php
$default = array(
    'di'=> array('instance'=> array(
            'Zend\View\PhpRenderer'=> array(
                'parameters'=> array(
                    'resolver'=>'Zend\View\TemplatePathStack',
                    'options'=> array(
                        'script_paths'=> array(
                            'Album'=> __DIR__ .'/../views',
                        ),
                    ),
                ),
            ),
    )),
);
// published environments
$production = $default;
$staging = $default;
$testing = $default;
$development = $default;
$config = compact('production','staging','testing','development');
return $config;
?>

“DI”的配置参数是用于配置2 Zend框架的依赖注入容器。在这
在这种情况下,我们配置了 Zend\View\PhpRenderer 类来使用 Zend\View
\TemplatePathStack 类去寻找视图脚本和相册模块,这些脚本将在
我们的意见目录。
其余的文件设置的生产,运输,测试和开发环境,使我们可以
根据需要覆盖默认。我们将填写在“默认”配置,因为我们经过
教程。

通报新模块的应用程序
现在,我们需要告诉ModuleManager,这个新的模块存在。这是在应用程序的
CONFIGS/ application.config.php文件,它是由骨架应用程序提供。更新此文件,以便
其模块部分包含的相册模块,以及这样的文件,现在看起来像这样:
(I’ve bolded the change required)
configs/application.config.php:

<?php
returnnewZend\Config\Config(array(
    'module_paths'=> array(
        realpath(__DIR__ .'/../modules'),
    ),
    'modules'=> array(
        'Album',
        'Application',
    ),
    'module_manager_options'=> array(
        'enable_config_cache'      =>false,
        'cache_dir'                => realpath(__DIR__ .'/../data/cache'),        'enable_dependency_check'  =>false,
        'enable_auto_installation'=>false,
        'manifest_dir'             => realpath(__DIR__ .'/../data'),
    ),
));
?>

正如您所看到,在加载应用模块之前,我们已经加载了我们的相册模块。作为一种公约,
我们希望你能够安装第三方模块到你的应用中来覆盖他默认的配置来编写应用模块的配置文件。
现在我们已经建立好了模块准备把我们自定义的代码放到里面。

Zend框架2入门(二) (转)的更多相关文章

  1. Zend框架2入门(一) (转)

    By Rob Allen, www.akrabat.com 修订0.1.2文件版权所有? 2011本教程的目的是给创建一个简单的数据库的介绍使用Zend Framework 2驱动的应用程序使用模型 ...

  2. 实体框架 (EF) 入门 => 二、在全新的数据库中使用 Code First

    学习资料:http://msdn.microsoft.com/zh-cn/data/jj193542 视频建立的控制台应用程序,我在这里使用MVC. 一.非常有磁性的,非常优雅 很喜欢看这个人的视频, ...

  3. Mybatis框架基础入门(二)--架构简介

    mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数据库的 ...

  4. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  5. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  6. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...

  7. 01-Spring Security框架学习--入门(二)

    一.入门案例 Spring Security 自定义登录界面 通过之前的一节 01-Spring Security框架学习--入门(一)的简单演示,Spring security 使用框架自带的登录界 ...

  8. Veins(车载通信仿真框架)入门教程(二)——调用第三方库

    Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...

  9. 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

随机推荐

  1. 学习日记_SSH框架web.xml配置文件篇

    1.参考一:http://www.blogjava.net/yxhxj2006/archive/2012/07/09/382632.html 2.参考二: <!-- web 容器启动spring ...

  2. 【转】教你爱上Blocks(闭包)

    Block 与传统代码相比较更加轻量,调用简洁方便,而且可以返回多个参数,使用Block可以让代码更加具有易读性,而我们在写回调时,也可以直接写在函数内部,而不用再去写一个回调函数 Block 闭包 ...

  3. vim 支持gb2312

    vi  /etc/vimrc 中添加如下,并保存. set termencoding=encodingset fileencodings=utf-8,gbk,ucs-bom,cp936set shif ...

  4. MySQL学习-常用命令整理

    Eyes are more eloquent than lips. “眉目传情胜于甜言蜜语” 整理了一下自己遇到并且经常用到的MySQL命令,虽然官方文档上有很详细的解释,不过自己还是在这里记录一下, ...

  5. jquery图片轮播代码

    自己写的轮播代码 来张样式效果图 先贴HTML样式 <body> <div id = "wrap"> <div id="lunbo-img& ...

  6. js 超级玛丽(未完成)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. delphi 创建数据库配置文件(TIniFile)

    一.有必要了解INI文件的结构: ;注释 [小节名] 关键字=值 ... ---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. ---- 值的类型有三种:字符串 ...

  8. xilinx FPGA普通IO作PLL时钟输入

    本帖转自于 :http://www.cnblogs.com/jamesnt/p/3535073.html 在xilinx ZC7020的片子上做的实验; [结论] 普通IO不能直接作PLL的时钟输入, ...

  9. 构建高可用web站点学习--前言

    前言:本人对于提高web站点的访问量等的有很浓厚的兴趣,也学习了将近一年的时间,希望能总结点东西,虽然很多东西都是从书籍和资料中学习的,而不是原创,但是这是我总结的一点感悟和进行的分类吧.而且可能思路 ...

  10. 分析智能卡的ATR格式

    一些例子 NXP 080=========3b f8 T0   Y1 = 0xF(TA1, TB1, TC1, TD1), K = 813 TA1 F = 0x1(Fi = 372, Fmax = 5 ...