开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Zend Framework 1.12中Module的用法

简介:
+关注继续查看

默认的,如果使用Zend studio的向导工具,生成的MVC目录结构如下:

%7D2CEO6YX6%7BRJVV)5%7BREAPNS

上面的那种目录结构,所有的controller,model和view文件都放在同一个目录下,如果项目很大的话,就不利于管理,为了便于管理,Zend Framework引入modules的概念,这样可以将controllers,models,views放入同一个Module。Module实际上是一个把MVC文件放在一起的一个文件夹而已。象上面的目录结构,没有用的Module。如果要使用Module,ZendFramework中通常有2种不同的目录结构(事实上也不一定必须采用这2种,可以自定义,但是通常都会采用下面的一种),如下图:

AWPVZE)WHL)%7BLS3_]VG1HI1229Y%60OISJ8WSN9WISB9R1[C



先看第一种,第一种就是在application目录下建2个不同的文件夹,一个是default,这个是ZF默认的module,另一个是Mymodule。建好后,还需要让ZF框架知道由于使用了Module导致controller的位置已经改变了。有2种方法,一种是写在application.ini配置文件中,还有一种是用代码实现。2种方法是等价的。

①如果写配置文件,只需要如下:

把原先的默认的controller配置注释掉(用分号注释)或者去掉,再加入新的路径。

;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

resources.frontController.controllerDirectory.default = APPLICATION_PATH "/default/controllers"

resources.frontController.controllerDirectory.Mymodule = APPLICATION_PATH "/Mymodule/controllers"

配置好后,通过index.php中下面的语句,会读到有关的配置的。

// Create application, bootstrap, and run

$application = new Zend_Application(

   APPLICATION_ENV,

   APPLICATION_PATH . '/configs/application.ini'

);

②如果不采用修改配置文件的方法,那么直接在index.php文件夹加入如下代码:

1
2
3
4
Zend_Controller_Front::getInstance()->setControllerDirectory(array(
    'default' => APPLICATION_PATH.'/default/controllers',
    'Mymodule' => APPLICATION_PATH.'/Mymodule/controllers'
));

建议加在$application = new Zend_Application这句语句后面,如果写在这句话前面,还需要写如下代码去加载'Zend_Controller_Front'这个类库:

include_once "Zend/Loader.php";

Zend_Loader::loadClass('Zend_Controller_Front');

事实上,也可以使用addControllerDirectory方法。

其中Zend_Controller_Front::getInstance()获得了一个Zend_Controller_Front对象,该对象在ZF中被设计为一个单例模式,只需要获取就行了,不需要创建实例。这个类完成实例化对象、触发事件、建立默认的行为等,它的主要目的是处理所有进入应用的请求。

在2个IndexAction中对应的输入下面的代码,在Mymodule下的Action中的代码:

1
2
3
4
5
public function indexAction()
{
    var_dump(Zend_Controller_Front::getInstance()->getrequest());
    echo "Hello from Mymodule indexAction";
}

在default下的Action中的代码:

1
2
3
4
5
  public function indexAction()
    {
        var_dump(Zend_Controller_Front::getInstance()->getrequest());
echo "Hello from default indexAction";
    }

顺便把它们各自的view也改了,分别为:

1
<p>This default module Index.phtml</p>

1
<p>This Mymodule module Index.phtml</p>

接下来看看运行效果,输入http://localhost:8002/default/ ,浏览器界面如下:

2_O26(1)D%7D(ONJRPHDO@[1C

发现之前读到的Zend_Controller_Request_Http对象中的参数字段中,可以清楚的看到,我们已经获得了MVC的三个值了。

事实上,对于http://localhost:8002/这样的不输入default,系统也会默认的认为module是default,可以自行测试。



接着,输入url:http://localhost:8002/Mymodule/ (相关服务器配置要搞定),这时候会发现页面报错。

I{}SHSXI1DP8)@YD%Z4TXRW

这是怎么回事?肯定哪里出错了。原来使用Module后,ZF有个约定,就是必须把Module对应的Controller的类名(不是文件名)比较加上前缀,前缀的格式为Module名+下划线_。而对于名称为default的Module,则不需要加前缀。在配置文件中,之前设置的Module名就是MyModule,_JM@XVZN]UU2BV@(2$I)FL0

因此把Mymodule文件夹中的IndexController.php中的类名改成Mymodule_IndexController。如果该Module名设成aaa,那么就改成aaa_IndexController

。通常为了便于管理,Module名和文件夹名都是一致的。再次运行http://localhost:8002/Mymodule/

Z)CSL6N2%%33}~``Z@_R@YH

终于成功了。注意URL中的module路径的大小写和配置中的大小写要一致。


对于第二种目录结构,同样有两种方式让ZF框架知道我们已经采用了module,和之前的方法一样,写配置文件和写代码:

①如果写配置文件,和第一种其实是一样的,把原先默认的配置文件注释掉或者去掉。把路径设置对。

;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

resources.frontController.controllerDirectory.default =APPLICATION_PATH"/HereIsModules/default/controllers"

resources.frontController.controllerDirectory.Mymodule =APPLICATION_PATH"/HereIsModules/Mymodule/controllers"

②如果不采用修改配置文件的方法,那么也是和第一种一样,直接在index.php文件夹加入如下代码:

1
2
3
4
Zend_Controller_Front::getInstance()->setControllerDirectory(array(
    'default' => APPLICATION_PATH.'/HereIsModules/default/controllers',
    'Mymodule' => APPLICATION_PATH.'/HereIsModules/Mymodule/controllers'
));

其后的操作和之前的操作一样。

事实上,无论采用哪种Module的目录方式,只要配置对了路径,都是等价的。而如果不采用Module,系统也会自己为module参数加上'default'。

由于ZF的默认路由结构就是:module/:controller/:action/*和:controller/:action/*,因此在不采用module的文件结构下,输入url:http://localhost:8003/defaulthttp://localhost:8003/是等价的,ZF会自动匹配路由结构,获取到对应的:module/:controller/:action/的值。






















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/1290458 ,如需转载请自行联系原作者








版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WebGL - .NET Framework 3.0
WebGL .NET Framework 3.0 1(共 1)对本文的评价是有帮助 - 评价此主题 WebGL 是基于标准的 Web 技术,提供了快速 2D 和 3D 图形。 本部分内容 主题 描述 WebGL 入门 使用 WebGL 创建极快的图形。
834 0
zend framework集成smarty
------zf的入口文件-index.php---------
804 0
建模形式构建Zend Framework应用
使用Zend Framework时,看到一个基于数据建模的工具Boza   具体如下: 在http://www.bozasolutions.com/index/framework2/menuId/6/download/1/下载文件, 参考http://www.
546 0
+关注
10136
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载