Zend框架2入门(二) (转)
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入门(二) (转)的更多相关文章
- Zend框架2入门(一) (转)
By Rob Allen, www.akrabat.com 修订0.1.2文件版权所有? 2011本教程的目的是给创建一个简单的数据库的介绍使用Zend Framework 2驱动的应用程序使用模型 ...
- 实体框架 (EF) 入门 => 二、在全新的数据库中使用 Code First
学习资料:http://msdn.microsoft.com/zh-cn/data/jj193542 视频建立的控制台应用程序,我在这里使用MVC. 一.非常有磁性的,非常优雅 很喜欢看这个人的视频, ...
- Mybatis框架基础入门(二)--架构简介
mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper.xml文件即sql映射文件,文件中配置了操作数据库的 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
- 01-Spring Security框架学习--入门(二)
一.入门案例 Spring Security 自定义登录界面 通过之前的一节 01-Spring Security框架学习--入门(一)的简单演示,Spring security 使用框架自带的登录界 ...
- Veins(车载通信仿真框架)入门教程(二)——调用第三方库
Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...
- 小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
随机推荐
- PLSQL Package dubug方法
初步接触EBS代码修改,花了几个小时搞明白了Package的debug方法, 1.打开需要测试的package,找到需要测试的过程,右键选择测试 2.在测试窗口中初始化过程的入参,点击测试按钮开始调试 ...
- 【USACO 1.3.4】牛式
[題目描述 ] 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ---------- * * * * * * ------- ...
- bash shell学习-shell基础 (笔记)
When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...
- C#三种方式实现序列化(转)
序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 序列化和反序列化最主要的作用有: ...
- 解决WebService本地访问正常,远程无法访问的问题
发布webservice后部署到自己的服务器上,然后本机,外网远程访问都没事,在用户服务器上部署后只能本机访问,远端访问不了,通过网络搜索到下面方法,但改后仍然不行.原来在自己服务器部署时是在默认网站 ...
- Delphi-UpperCase 函数
函数名称 UpperCase 所在单元 System.SysUtils 函数原型 function UpperCase(const S: string): string; 函数功能 将字符串中所有的小 ...
- iOS开发网络篇—XML数据的解析
iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...
- mysql的mvcc(多版本并发控制)
mysql的mvcc(多版本并发控制) 我们知道,mysql的innodb采用的是行锁,而且采用了多版本并发控制来提高读操作的性能. 什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列 ...
- 多线程+fork 引发的bug查找
1. 问题描述 某个server SA是一个多线程服务器,主线程会调用fork,再exec生成工作进程SB. 实际上,SA的主线程fork出了一个子线程,但没有执行exec. # ps ajxf | ...
- OSPF+LVS ,qugga,vconfig,...感觉这些很有想法啊
将以前铁板一块的硬件拿来无限细分,路由器,交换机可灵活实现,SDN,NVF.硬盘可以分区,分区可以分布式块存储,操作系统可虚拟化,KVM OR LXC,网络可自由随时按需求定制更改配置. 操作系统支持 ...