在前边的例子中,我们的index.php引导文件所在的文件夹与控制器、视图等所在的文件夹是不同的,这并不符合一般网站项目的文件夹的组织习惯。从本部分开始,我们把他们放在同一个文件夹中,这是因为ZF提供了灵活的文件夹组织和配置能力。
我们新的文件夹结构如下:
…/htdocs
library
Zend
Phpchina2.com
controllers
models
views
index.php
.htaccess
即把原来app_phpchina1.com文件夹下的子文件夹Controllers、models、views转移到文件夹phpchina1.com下,与index.php和.htaccess文件放在一起。为了不覆盖原来的代码,我们把原来的phpchina1.com文件夹拷贝一份,命名为phpchina2.com。
为了测试,我们建立一个新的虚拟主机phpchina2.com。这可以仿照前面的phpchina1.com来完成,即在httpd.conf中添加:
<VirtualHost *:8080>
ServerAdmin any@any.com
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/phpchina2.com"
ServerName phpchina2.com
ErrorLog "logs/phpchina2.com-error.log"
CustomLog "logs/phpchina2.com-access.log" common
</VirtualHost>
重新启动Apache服务。
然后再在hosts文件中加一条
<服务器IP> phpchina1.com
以后即可以以http://phpchina2.com:8080/*.*的形式访问新的网站。但现在暂时还不能像前边的例子一样运行原来的示例代码,因为还需要对index.php里的路径配置进行调整。
我们把语句PATH_SEPARATOR . '../App_phpchina1.com/models/'修改为:
PATH_SEPARATOR . 'models/'
把语句"default"=>'../app_phpchina1.com/controllers'修改为:
"default"=>'controllers'
然后用浏览器打开地址http://phpchina2.com:8080,就可以看到和原来一样,显示了字符串“Hello PHPChina1.com!”。也可以打开http://phpchina2.com:8080/news显示“Welcome to News!”字符串。
下一步我们对Controllers进行扩展改造。比如我们有这样的需求:如果一个网站项目很大,有多个模块,Controllers文件夹下将有大量的控制器文件,我们打算通过按模块建立子文件夹对其进行分类存放,IndexController.php控制器文件存放在index文件夹下,news控制器文件存放在news文件夹下。
首先修改index.php文件,把
$fc->setControllerDirectory(array(
"default"=>'controllers',
));
处的"default"=>'controllers'修改为
"default"=>'controllers/index'
这时http://phpchina2.com:8080地址就可以打开了,显示结果与原来相同。
但要访问news文件夹下的NewsController.php控制器,必须把news添加到搜索路径,并为其命名,我们这里命名为other模块,这样我们就添加以下语句:
$fc->addControllerDirectory('controllers/news', 'other');
然后打开地址http://phpchina2.com:8080/news,看不到原来的结果。
再打开地址http://phpchina2.com:8080/other和http://phpchina2.com:8080/other/news,也看不到原来的结果。
原来,需要修改NewsController.php中的语句
Class NewsController extends Zend_Controller_Action为
class other_NewsController extends Zend_Controller_Action
即在类名前加“other_”字符串。然后访问地址
http://phpchina2.com:8080/other/news
即可得到正确的结果。
这里有一个新问题,即http://phpchina2.com:8080/other/news和index默认文件夹的
OtherController控制器中的newsAction方法访问路径是相同的,如果index文件夹下同时还有文件OtherController.php,内容为:
<?php
class OtherController extends Zend_Controller_Action
{
function newsAction()
{
echo "This is OtherController.php ==> newAction";
}
}
?>
那么http://phpchina2.com:8080/other/news会不会显示
This is OtherController.php ==> newAction
字符串的结果呢?不会的,因为按模块搜索访问方式优先。有了other搜素路径名,就不能再访问默认文件夹下的other控制器中的任何方法了,即使搜素路径下没有任何对应的控制器文件,也不能访问。即,即使没有news文件夹下的NewsController.php文件,http://phpchina2.com:8080/other/news也不会获得index文件夹下OtherController.php中newsAction方法的结果。
这里的搜素路径和Web服务器的虚拟路径有点相似。但是因为可以用代码指定,所以更灵活一些。后面,我们根据这一点可以灵活的组织网站项目的文件夹结构。
我们对前边ZF中请求URL的格式做一些补充,原URL格式
http://host_name/controller_name/action_name/param1/ value1/param2/ value2…
可以扩展为:
http://host_name/路径/controller_name/action_name/param1/ value1/param2/ value2…
路径名需要作为“路径名_”字符串的形式加在
代码“Class controller_name”的实现代码的前边,成为“Class路径名_controller_name”的形式。明白了这点,在分析ZF的源代码的时候,就不会被路径问题所迷惑了。
张庆(网眼)文章出处phpchina
分享到:
相关推荐
在Zend Framework中,`Zend_Controller_Plugin`是一个强大的机制,允许开发者在应用程序的不同阶段插入自定义的行为,以扩展和增强其功能。插件系统提供了一种灵活的方式,可以在请求生命周期的关键点进行干预,如...
主要介绍了Zend Framework教程之分发器Zend_Controller_Dispatcher用法,结合实例形式详细分析了分发器Zend_Controller_Dispatcher的结构,功能,使用技巧与相关注意事项,需要的朋友可以参考下
主要介绍了Zend Framework教程之路由功能Zend_Controller_Router,详细分析了路由功能Zend_Controller_Router的原理,使用技巧与相关注意事项,需要的朋友可以参考下
Zend Framework是一个开源的PHP框架,它采用模型-视图-控制器(MVC)的设计模式,旨在简化基于Web的应用开发。在Zend Framework中,请求对象的封装由Zend_Controller_Request组件实现,该组件是整个MVC架构中用于...
Table of Contents •Introduction to Zend Framework •Overview •Installation •Learning Zend Framework •Zend Framework Quick Start •Autoloading in Zend Framework •Plugins in Zend Framework •...
**基于Zend Framework框架的CMS PHP源代码详解** 在IT领域,内容管理系统(CMS)是用于构建和管理网站的软件工具,而PHP作为一种流行的服务器端脚本语言,常被用于开发Web应用,包括CMS。本资源提供了基于Zend ...
"ZendFramework" 标签明确了这个压缩包与 Zend Framework 框架有关。Zend Framework 是一个广泛使用的开源 PHP Web 应用开发框架,由 Zend Technologies 公司开发。它遵循 Model-View-Controller (MVC) 设计模式,...
**Zend Framework 框架详解** Zend Framework 是一个基于组件的 PHP 开发框架,由 Zend Technologies 公司创建并维护,被PHP官网推荐为MVC(Model-View-Controller)框架之一,尤其适合构建企业级的Web应用。本教程...
Zend Framework 遵循 Model-View-Controller(MVC)设计模式,提倡“干干净净的代码”原则,使开发者能够快速构建健壮的 Web 应用。它提供了许多组件,如数据库抽象层、缓存、安全、表单处理、文件上传、邮件发送等...
### Zend Framework 框架开发入门教程 #### 一、简介 本文档旨在提供一个针对初学者的 **Zend Framework** 开发指南。该框架是一种基于 PHP 的开源 Web 应用框架,提供了大量的组件来帮助开发者构建高效且健壮的 ...
- 命令行下载:使用`wget`命令下载,例如:`$ wget http://framework.zend.com/download/tgz`,接着解压:`$ tar -xvzf ZendFramework-0.1.2.tar.gz`。 ##### 目录结构: - 将下载的`library`目录重命名并放置于...
综上所述,"zendframework中文手册2010"提供了全面的 Zend Framework 学习资源,无论是初学者还是经验丰富的开发者,都能从中受益,提升PHP编程技能。通过深入学习和实践,可以有效地利用 Zend Framework 构建高质量...
【Zend Framework 动作助手 (Zend_Controller_Action_Helper) 用法详解】 在 Zend Framework 中,动作助手(Action Helper)是一种设计模式,它允许开发者将常用的功能封装起来,以便在需要时方便地在动作控制器...
标题"zfcn.rar_ZendFramework"暗示了这是一个关于 Zend Framework 的学习资源,可能是某个教程或文档的压缩包。"zfcn.rar"可能是文件的压缩格式,通常rar是用于压缩文件的一种常见格式。而"_ZendFramework"这部分...
Zend Framework 是一个开源、基于组件的 PHP 框架,它遵循 Model-View-Controller (MVC) 设计模式,为开发高质量、可扩展的 Web 应用程序提供了强大的基础。此版本1.12.9是该框架的一个稳定版本,包含了许多经过时间...
2. **组件化**:框架由一系列可复用、松散耦合的组件组成,如 Zend_Db(数据库抽象层)、Zend_View(视图引擎)、Zend_Controller(控制器)等,开发者可以根据需要选择使用。 3. **对象关系映射 (ORM)**:Zend ...
描述提到"zend framework zendframework manual 手册,Zend Framework手册 中文版,有一部分还没有汉化",这意味着虽然该手册是中文版本,但可能并非全部内容都已翻译完成,部分原文可能是英文状态。 **Zend ...
其 API(应用程序编程接口)文档是开发者在使用 Zend Framework 进行开发时的重要参考资料。 **Zend Framework 概述** Zend Framework 是一个开放源代码的 PHP 框架,采用组件式设计,允许开发者根据需求选择和使用...
2. **MVC 结构**:Zend Framework 实现了 Model-View-Controller 设计模式,用于分离业务逻辑、数据处理和用户界面。这有助于提高代码的可读性和可维护性。 3. **对象关系映射(ORM)**:ZF1 包含了 Zend_Db 和 ...
Zend Framework 是一个开源的、基于 PHP 语言的 Web 应用开发框架,它遵循 Model-View-Controller (MVC) 设计模式,为开发者提供了一套强大的工具和服务,以提高开发效率和代码质量。最新手册针对的是 Zend ...