Zend Framework Module之多模块配置
摘要:该文将为大家简单介绍一下如何使用zend framework创建模块化的应用程序。
zend framework对多模块的支持是很好的,但是可能是由于功能太过强大的缘故,部署起来并不是很容易。许多人在使用过程中都会遇到这样 那样的问题,而且zend framework现在已经到1.11版本了,网络上的很多资料都还停留在旧版本上,因此我在这里以当前的最新版本1.11为 例,来简单介绍一下如何使用zend framework创建模块化的应用程序。
1、准备工作
首先假设你已经部署了web服务器和php,并下载了zend framework的最新版本,创建了一个最原始的zend framework项 目,并可以访问默认的action了。你可以使用zend framework工具来创建项目,具体操作参见使用zend framework创建项目。 当然也可以自己手动建立文件夹和文件,参见zend framework推荐的项目目录结构。
简单地看一下默认的几个重要目录。
首先是public,它不但存放了程序的入口点index.php,还可以存放图片,css,javascript文件等。
其次是library,用于存放一些类库,包括你自己定义的或第三方的类库。
然后是test,用于存放单元测试等测试文件的。
最后,也是和我们这里要讲的关系最大的目录application。进到application目录下,会有以下目录:configs:存放配置文件,一般会有一个主配置文件application.ini;
controllers:操制器,如默认的IndexController.php;
models:存放业务逻辑,数据模型等文件;
views:视图层的脚本,一般以.phtml为后缀名;
modules:模块目录,使用工具默认选项自动生成的是没有这个目录的,需要手动添加。modules底下可以包含多个以模块名命名的文件夹,如 admin,默认是default,一个文件夹代表一个模块,其下的目录结构与application目录类似,又可以包 controllers,models,views等目录。
需要注意的是模块下的controllers下面的文件的类名请加上模块名前缀,如application/modules/admin/controllers/IndexController.php的类名为Admin_IndexController。
如果你需要在项目中方便的使用你自己写的一些类库(如名称空间是Rockux),或是第三方的类库,可以修改application.ini文件,添加以下行:
autoloaderNamespaces.rockux =”Rockux_”autoloaderNamespaces.thirdParty =”ThirdPartyLibrary_”
当然你也可以根据需要多添加几个,不过请注意最后面的下划线。
2、建立模块
现在我们来创建一个admin模块,目录如下:
application/modules/admin/controllers
application/modules/admin/models
application/modules/admin/views
application/modules/admin/views/scripts
application/modules/admin/views/helpers
application/modules/admin/views/filters
并创建以下文件:
application/modules/admin/controllers/IndexController.php(类名为Admin_IndexController)
application/modules/admin/views/scripts/index/index.phtml
除了新建模块文件之外,还需要更改配置文件application.ini,删除以下行,如果有的话:
resources.frontController.controllerDirectory = APPLICATION_PATH”/controllers”
再加上如下行:
resources.frontController.moduleDirectory = APPLICATION_PATH ”/modules”
resources.frontController.moduleControllerDirectoryName =”controllers”
resources.frontController.defaultModule =”default”
resources.modules[]=0
这样,再访问http://localhost/webroot/public/admin,应该就能看到admin模块输出的内容了。
如果我们要充分发挥模块的强大功能,我们还需要为模块添加一个启动文件Bootstrap.php。它可以使得你在事个模块中方便的使用类资源,models, filters, helpers等。在admin下新建Bootstrap.php,代码如下:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap{}
并且在application/Bootstrap.php文件里加入以下方法:
protectedfunction _initAppAutoload(){
$autoloader=new Zend_Application_Module_Autoloader(
array( ’namespace’=>’App’,'basePath’=>dirname(__FILE__), )
);
return$autoloader;
}
它将会自动加载models,filters,helpers等到我们的默认模块。通过以上设置,我们就可以在接下来的controllers里使用所有这些资源了。
3、设置布局
这里主要说明如何配置不同的模块应用不同的布局,关于布局的概念和基本的用法,请参见官方文档的创建布局和Zend_Layout入门。
对于一般页面,你可能需要使用一个布局文件,如三行两列式,而对于admin模块,你可能需要使用另一种布局,如两列式。要达到这个目的可以采用两种方式。
第一种,布局脚本文件存放在统一的文件夹,如application/layout
可以在application下新建如下目录和文件:
application/layouts/scripts/layout.phtml
application/layouts/scripts/admin.phtml
在配置文件application.ini中添加如下几行:
resources.layout.layoutPath = APPLICATION_PATH ”/layouts/scripts”
resources.layout.layout =”layout”
admin.resources.layout.layout =”admin”
第二种,不同模块的布局脚本文件分别存放在各自的模块文件夹下
可以在application下新建如下目录和文件:
application/layouts/scripts/layout.phtml
application/modules/admin/layouts/scripts/layout.phtml
在配置文件application.ini中添加如下几行:
resources.layout.layoutPath = APPLICATION_PATH ”/layouts/scripts”
resources.layout.layout =”layout”
admin.resources.layout.layoutPath = APPLICATION_PATH ”/modules/admin/layouts/scripts”
不论是第一种还是第二种,这时如果访问http://localhost/admin,你会发现系统并没有使用期望的admin.phtml作为布
局文件,而是使用了默认的layout.phtml。这是因为admin那行配置并不是系统默认能处理的有效配置,所以我们要自己来处理它。
我们新建文件:library/Rockux/Controller/Action/Helper/LayoutLoader.php,
针对第一种情况代码如下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract{
publicfunction preDispatch() {
$bootstrap=$this->getActionController() ->getInvokeArg(‘bootstrap’);
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layout'])) {
$layoutScript=$config[$module]['resources']['layout']['layout'];
$this->getActionController() ->getHelper(‘layout’) ->setLayout($layoutScript);
}
}
}
针对第二种情况代码如下:
class Rockux_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract{
publicfunction preDispatch() {
$bootstrap=$this->getActionController() ->getInvokeArg(‘bootstrap’);
$config=$bootstrap->getOptions();
$module=$this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layoutPath'])) {
$layoutPath=$config[$module]['resources']['layout']['layoutPath'];
$this->getActionController() ->getHelper(‘layout’) ->setLayoutPath($layoutPath);
}
}
}
接下来我们还需要将它添加到application/Bootstrap.php里去
protectedfunction _initLayoutHelper(){
$this->bootstrap(‘frontController’);
$layout= Zend_Controller_Action_HelperBroker::addHelper( new Rockux_Controller_Action_Helper_LayoutLoader());
}
再次访问http://localhost/webroot/public/admin,应当就可以看到使用指定的布局文件了。
如果要针对某个特定的controller使用特定的layout,可以在controller的init()方法里添加如下代码:
$layout= Zend_Layout::getMvcInstance();$layout->setLayout(‘layout_special’);
详细的请参见 ZendFramework官方文档 :http://framework.zend.com/manual/1.11/en/zend.controller.modular.html
Zend Framework Module之多模块配置的更多相关文章
- Zend Framework(一) windows8.1下配置zend framework1.12
windows8.1下配置zend framework1.12配置步骤: 1. 下载 zend framework1.12库 2. 创建zend frameworkproject 2 ...
- zend framework 1.10项目配置与经典hello world
准备工作 前置条件:PHP>=5.14,Apache开启mod_rewrite支持,开启php的pdo扩展. Zend Framework 要求 PHP版本不低于5.1.4,但强烈建议使用 5. ...
- Zend Framework 入门(4)—页面布局
Zend Framework 的页面布局模块——Zend_Layout——既可以跟 MVC 一起使用,也可以单独使用.本文只讨论与 MVC 一起使用的情况. 1. 布局脚本 在 application ...
- zend framework多模块多Layout配置
转自: http://blog.csdn.net/a82168506/article/details/10228011 上次接触zend framework已经很久远了,10年的事情了.最近在做一个项 ...
- zend framework多模块配置
上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资 ...
- 转:Zend Framework 2.0 分析
文章来自于:http://bbs.phpchina.com/thread-268362-1-1.html ZF2已经发布,与ZF1相比,MVC这一模块内部的实现机制可谓大相径庭,许多用过ZF1的PHP ...
- 主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,ThinkPHP,FleaPHP)
Zend Framework 优点: Zend Framework大量应用了PHP5中面向对象的新特征:接口.异常.抽象类.SPL等等.这些东西的应用让Zend Framework具有高度的模块化和灵 ...
- Zend Framework 2中如何使用Service Manager
end Framework 2 使用ServiceManager(简称SM)来实现控制反转(IoC).有很多资料介绍了service managers的背景,我推荐大家看看this blog post ...
- 【原创】Zend Framework 2框架之MVC
ZendFramework 2框架之MVC 作者:sys(360电商技术组) 1.前言 Zend Framework 2是zend官方推出的php开源框架,基于php5.3.他全然採用面向对象的代码实 ...
随机推荐
- CentOS下编译安装Apache2(新)
官网下载apache,apr, apr-util,pcre httpd-2.4.16.tar.gz http://httpd.apache.org/download.cgi#apache24 apr- ...
- vr & obv
买卖信号 1.当VR曲线的运行形态一底比一底低,而OBV曲线的运行形态一底比一底高,同时股价也突破中短期均线,则表明VR指标和OBV出现了底背离走势,这是VR指标发出的短线买入信号.如图(15–1)所 ...
- 用TcpClient如何获取远程网页的内容
用TcpClient如何获取远程网页的内容 private string GetHTMLTCP(string URL) { string strHTML = "";//用来保存获得 ...
- 5V与3.3V器件电平转换
源:5V与3.3V器件电平转换 当你使用3.3V的单片机的时候,电平转换就在所难免了,经常会遇到3.3转5V或者5V转3.3V的情况,这里介绍一个简单的电路,他可以实现两个电平的相互转换(注意是相互哦 ...
- zf-关于改绍兴县2个简单的BUG却需要ORACLE数据库的感慨
装了一天你的数据库,其实可以直接检出拿到后台代码,然后远程实施让他进项目,我在他的项目上找action,找图片都是一样的,有时候需求文档上也是会截图到action的,蛋疼,这么简单的方法我居然忘记了.
- 转 玩转Bash变量
PS : 注意本文讨论的是Bash,而不一定是/bin/sh所链接的那个shell.这里出现的所有代码片段,默认在顶上都添加了#!/bin/bash. 一门自带混淆的语言 while (( $# )) ...
- make[1]: *** [/workopenwrt/trunk/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/stamp/.tools_install_nnnnn] Error 2 make[1]: Leaving directory `/work/openwrt/trunk' make: *** [world]
主要原因是编译时未连上网,编译时需要下载些插件,连接网后,重启下系统再编译下.
- Hadoop远程调用机制
- c# 错误 两个输出文件名解析为同一个输出路径
检查同项目的其他文件夹下面已有其他同名窗体,影响设计器
- 关于MySql中自增长id设置初始值
在MySQL数据库,设置了id为自增长类型,但由于程序还处于开发阶段,很容易的会产生错误数据,然后就直接删除了,可是id的自增长值没有跟着减少,这里提示: 如果表中数据没有用,直接删除了数据,自动增长 ...