zendframework多模块多布局配置
1、准备工作
首先假设你已经部署了web服务器和php,并下载了zendframework的最新版本,创建了一个最原始的zendframework项目,并可以访问默认的action了。你可以使用zendframework工具来创建项目,具体操作参见使用zendframework创建项目。当然也可以自己手动建立文件夹和文件,参见zendframework推荐的项目目录结构。
简单地看一下默认的几个重要目录。
首先是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[]
这样,再访问http://localhost/admin,应该就能看到admin模块输出的内容了。
如果我们要充分发挥模块的强大功能,我们还需要为模块添加一个启动文件——Bootstrap.php。它可以使得你在事个模块中方便的使用类资源,models,filters,helpers等。在admin下新建Bootstrap.php,代码如下:
classAdmin_BootstrapextendsZend_Application_Module_Bootstrap
{
}
并且在application/Bootstrap.php文件里加入以下方法:
protectedfunction_initAppAutoload()
{
$autoloader=newZend_Application_Module_Autoloader(array(
"namespace"=>"App",
"basePath"=>dirname(__FILE__),
));
return$autoloader;
}
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,
针对第一种情况代码如下:
classRockux_Controller_Action_Helper_LayoutLoaderextendsZend_Controller_Action_Helper_Abstract
{
publicfunctionpreDispatch()
{
$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);
}
}
}
针对第二种情况代码如下:
classRockux_Controller_Action_Helper_LayoutLoaderextendsZend_Controller_Action_Helper_Abstract
{
publicfunctionpreDispatch()
{
$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(
newRockux_Controller_Action_Helper_LayoutLoader());
}
再次访问http://localhost/admin,应当就可以看到使用指定的布局文件了。
如果要针对某个特定的controller使用特定的layout,可以在controller的init()方法里添加如下代码:
$layout=Zend_Layout::getMvcInstance();
$layout->setLayout("layout_special");
相关文章
- pycharm配置opencv环境_pycharm opencv安装
- IIS 配置集中式证书模块实现网站自动绑定证书文件
- zabbix模块配置学习
- 雪花系统最新邮件配置465端口发送邮箱设置方法
- pyqt5安装配置_如何安装pyqt5安装包
- 【BCT_RFC 3927】IPv4 链路本地地址的动态配置
- 振弦采集模块参数配置工具的连接与断开
- 振弦采集模块配置工具VMTool生成寄存器值
- 振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
- php 中输出控制器名称,Thinkphp5.0&&5.1怎么获取模块名控制器名方法名(权限配置中)
- 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )
- 【Android Gradle 插件】Gradle 构建机制 ② ( Groovy 语言 DSL 特性 | settings.gradle 配置文件解析 | 配置子模块工程目录 | 顶层配置 )
- WPJAM 配置器接口模块使用说明
- Sql Server2012数据库使用IP登录服务器的配置教程
- rhel 5.x 使用 /bin/raw 配置裸设备详解程序员
- Oracle 参数 MAX_PDBS 官方解释,作用,如何配置最优化建议
- MySQL Variables log_output 数据库 参数变量解释及正确配置使用
- MySQL配置闪耀Jira的灿烂光芒(jira配置mysql)
- MM模块自动过账原理及后台配置详解编程语言
- 配置MySQL数据库连接端口配置指南(mysql数据库连接端口)
- Linux下查看网络配置的指南(linux中查看网络配置)
- MongoDB安装及配置要求(mongodb配置要求)
- 配置Redis缓存以优化性能(redis缓存配置文件)
- windows配置Apach+PHP+MySQL等环境
- 使用SQL Server配置管理表(sqlserver配置表)
- 学习Linux下的虚拟网卡配置方法(linux虚拟网卡)
- Linux虚拟机如何配置网络连接(虚拟机linux怎么联网)
- 步步为营调整Redis配置的必要技巧(如何修改redis配置)
- NginxGzip模块启用和配置指令详解