上次接触zend framework已经很久远了,10年的事情了。最近在做一个项目,时间不紧,就又把ZF拿出来折腾。而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资料,为了避免此种情况再次发生,做个记录吧。

首先,我们要新建一个ZF项目,目录结构如下。

我们想要配置多模块呢,首先要在,application下面建一个modules文件夹,然后创建模块文件夹,这里我以default和admin举例。default为前台,admin为后台,符合最基础的网站所需了。在modules下面新建default以及admin文件夹,然后分别把controllers,models以及views剪切到这两个文件夹内。此时,文件目录如下所示。并且将Bootstrap.php文件分别复制到两个目录里。

首先,我们去修改application.ini文件。删除以下这行。

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

然后添加以下内容。

resources.frontController.controllerDirectory.default =APPLICATION_PATH "/modules/default/controllers"
resources.frontController.controllerDirectory.admin =APPLICATION_PATH "/modules/admin/controllers"
resources.FrontController.moduleDirectory =APPLICATION_PATH "/modules"
resources.FrontController.moduleControllerDirectoryName ="controllers"
resources.FrontController.defaultModule= "default"
resources.modules[] = ""

这里我们看到,我们设置了default模块为默认模块。也就是说default模块里面的controller和model的类名都不需要另外处理,而其它模块里面的controller及model的类名都需要加模块前缀哦,这里后面会详细讲到。

然后我们去修改application/Bootstrap.php文件为以下内容。

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAppAutoload() {
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'App',
'basePath' => dirname(__FILE__),
));
return $autoloader;
} }

到这里还没有结束,我们需要去修改对应的模块里面的Bootstrap.php文件的内容。

先修改application/modules/default/Bootstrap.php,修改为以下内容:

<?php

class Default_Bootstrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoload() {
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules/default'));
return $autoloader;
}
}

然后再修改为 application/modules/admin/Bootstrap.php,修改为以下内容:

<?php

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoload() {
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules/admin'));
return $autoloader;
} }

以上的修改要注意两点,第一,注意类名需要加模块前缀,第二,注意模块里面的文件名继承的是Zend_Application_Module_Bootstrap而不是Zend_Application_Bootstrap_Bootstrap。如果继承文件错误的话,会报错:Maximum function nesting level of '100' reached, aborting!

我们再进行最后一步,就可以进行多模块的访问了。因为default是默认模块,所以我们不需要去修改,我们要去修改的是admin模块里面的内容。

打开admin模块里面的IndexController.php文件,修改类名为:

class Admin_IndexController extends Zend_Controller_Action
{
}

此时我们可以测试一下,我们访问http://localhost/project/public则访问的是default模块的首页,当访问http://localhost/project/public/admin时访问的是后台首页。

我们说完了多模块配置的contoller访问之后,再来提一下model的访问。

首先我们去修改配置文件,application.ini。在production中添加如下内容。

db.adapter = PDO_MYSQL
db.params.host = localhost
db.params.dbname = voice_sms
db.params.username = root
db.params.password = 123456
db.params.charset = UTF8

然后我们去连接数据库,在application/Bootstrap.php里面添加这个方法

	protected function _initDatabase() {
$options = $this->getApplication()->getOptions();
$db = Zend_Db::factory( $options[ 'db' ][ 'adapter' ], $options[ 'db' ][ 'params' ] );
Zend_Db_Table_Abstract::setDefaultAdapter( $db );
Zend_Registry::set( 'DB', $db );
return $db;
}

先说default模块。

在application/default/models里面添加一个model文件,SmsInformation.php,此文件的内容为:

class Model_SmsInformation
{
private $_tableName;
private $_connect; /**
* construct function
*/
public function __construct() {
$this->_tableName = 'smsinformation';
$this->_connect= Zend_Registry::get( 'DB' );
}
}

我们在在application/default/controller/IndexController.php中用以下语句则可实例化此model

$smsInformationModel = new Model_SmsInformation();

然后说admin模块。

在application/admin/models里面添加一个model文件,SmsInformation.php,此文件的内容为:

class Admin_Model_SmsInformation
{
private $_tableName;
private $_connect; /**
* construct function
*/
public function __construct() {
$this->_tableName = 'smsinformation';
$this->_connect= Zend_Registry::get( 'DB' );
}
}

请注意,类名有模块前缀哦。

我们在在application/admin/controller/IndexController.php中用以下语句则可实例化此model

$smsInformationModel = new Admin_Model_SmsInformation();

到这里就一切OK了。

zend framework多模块配置的更多相关文章

  1. zend framework多模块多Layout配置

    转自: http://blog.csdn.net/a82168506/article/details/10228011 上次接触zend framework已经很久远了,10年的事情了.最近在做一个项 ...

  2. Zend Framework Module之多模块配置

    摘要:该文将为大家简单介绍一下如何使用zend framework创建模块化的应用程序. zend framework对多模块的支持是很好的,但是可能是由于功能太过强大的缘故,部署起来并不是很容易.许 ...

  3. Zend Framework(一) windows8.1下配置zend framework1.12

    windows8.1下配置zend framework1.12配置步骤: 1.     下载 zend framework1.12库 2.      创建zend frameworkproject 2 ...

  4. zend framework 1.10项目配置与经典hello world

    准备工作 前置条件:PHP>=5.14,Apache开启mod_rewrite支持,开启php的pdo扩展. Zend Framework 要求 PHP版本不低于5.1.4,但强烈建议使用 5. ...

  5. Zend Framework 入门(1)—快速上手

    1. 安装 从 Zend Framework 的网页上下载最新版本.解压后,把整个目录拷贝到一个理想的地方,比如:/php/library/Zend. 打开 php.ini 文件,确认包含 Zend ...

  6. 转:Zend Framework 2.0 分析

    文章来自于:http://bbs.phpchina.com/thread-268362-1-1.html ZF2已经发布,与ZF1相比,MVC这一模块内部的实现机制可谓大相径庭,许多用过ZF1的PHP ...

  7. Zend Framework 留言本实战(转)

    一.环境搭建和ZF安装              *[注]本节内容大部分来至Zend Framework官方手册       1.1 Zend Framework下载 Zend Framework 使 ...

  8. 主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,ThinkPHP,FleaPHP)

    Zend Framework 优点: Zend Framework大量应用了PHP5中面向对象的新特征:接口.异常.抽象类.SPL等等.这些东西的应用让Zend Framework具有高度的模块化和灵 ...

  9. Zend Framework 2中如何使用Service Manager

    end Framework 2 使用ServiceManager(简称SM)来实现控制反转(IoC).有很多资料介绍了service managers的背景,我推荐大家看看this blog post ...

随机推荐

  1. 浅谈Hash函数

    什么是hash函数: hash函数也可以翻译成“散列”函数,一般就使用音译“哈希”函数,简单的说哈希函数是对任意长度的输入进行的压缩映射,所谓的压缩映射顾名思义,输出通常来说要比输入短,并且得到的输出 ...

  2. Collections之sort的两个方法(自然排序和自定义比较器排序)

    Collections是个服务于Collection的工具类(静态的),它里面定义了一些集合可以用到的方法. 本文演示了Collections类里sort()的两个方法.第一种只需传入被排序的集合,便 ...

  3. 5G关键技术研究方向

    对于还没体验4G移动通信魅力的国内的移动通信用户而言,5G也许还是镜中花,雾中月:但对于科研界而言,5G研究已经启程,三星电子5月份宣布,率先开发出了首个基于5G核心技术的移动传输网络,实现每秒1Gb ...

  4. Gulp browserify livereload

    Gulp browserify livereload 之前在browserify那个博文中介绍了gulp + browserify 不过那个配置还不能满足日常需要 搬运 https://github. ...

  5. 简单测试运行时类信息(RTTI),附详细例子

    新建一个单元文件,填写如下代码,然后保存为 ClassInfoUnit.pas,这里定义了一个结构,用来读取指定类的信息. unit ClassInfoUnit; interface uses Cla ...

  6. windows中使用Git工具连接GitHub(配置篇)

    Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到GitHub上面了.例如:jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js,  ...

  7. 解决[warn] _default_ VirtualHost overlap on port 80, the first has precedence问题

    问题背景: 在apache的httpd.conf里新增加了1个VirtualHost,域名是xxx.com,此时,服务器总共2个VirtualHost ,service httpd restart的时 ...

  8. [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程

    [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程   google的android自带的apps写的是相当牛逼的,将其导入到ecli ...

  9. cocos2d-x 多点触控实现缩放及相关问题的解决方法

    首先,来看下代码: 声明文件: #ifndef __loading__MoreTouches__ #define __loading__MoreTouches__ #include <iostr ...

  10. Java程序栈信息文件中的秘密(五)

    最近发现在使用jstack工具在导出Java应用的线程栈时有一个小小的窍门,比如Linux环境上有一个用户为appuser,假如以这个用户启动了一个Java进程B,如果想要导出进程B的线程栈,则必须切 ...