`
lovefly_zero
  • 浏览: 390446 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

走进Zend Framework框架编程(五):Zend_Controller进阶

    博客分类:
  • PHP
阅读更多

在前边的例子中,我们的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/otherhttp://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_Plugin`是一个强大的机制,允许开发者在应用程序的不同阶段插入自定义的行为,以扩展和增强其功能。插件系统提供了一种灵活的方式,可以在请求生命周期的关键点进行干预,如...

    Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解

    主要介绍了Zend Framework教程之分发器Zend_Controller_Dispatcher用法,结合实例形式详细分析了分发器Zend_Controller_Dispatcher的结构,功能,使用技巧与相关注意事项,需要的朋友可以参考下

    Zend Framework教程之路由功能Zend_Controller_Router详解

    主要介绍了Zend Framework教程之路由功能Zend_Controller_Router,详细分析了路由功能Zend_Controller_Router的原理,使用技巧与相关注意事项,需要的朋友可以参考下

    Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解

    Zend Framework是一个开源的PHP框架,它采用模型-视图-控制器(MVC)的设计模式,旨在简化基于Web的应用开发。在Zend Framework中,请求对象的封装由Zend_Controller_Request组件实现,该组件是整个MVC架构中用于...

    ZEND FRAMEWORK 1.11.7 中文参考文档

    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 源代码

    **基于Zend Framework框架的CMS PHP源代码详解** 在IT领域,内容管理系统(CMS)是用于构建和管理网站的软件工具,而PHP作为一种流行的服务器端脚本语言,常被用于开发Web应用,包括CMS。本资源提供了基于Zend ...

    ZendFramework-1.10.4-minimal

    "ZendFramework" 标签明确了这个压缩包与 Zend Framework 框架有关。Zend Framework 是一个广泛使用的开源 PHP Web 应用开发框架,由 Zend Technologies 公司开发。它遵循 Model-View-Controller (MVC) 设计模式,...

    zend framework教程.zip

    **Zend Framework 框架详解** Zend Framework 是一个基于组件的 PHP 开发框架,由 Zend Technologies 公司创建并维护,被PHP官网推荐为MVC(Model-View-Controller)框架之一,尤其适合构建企业级的Web应用。本教程...

    ZendFramework-1.7.2帮助文档

    Zend Framework 遵循 Model-View-Controller(MVC)设计模式,提倡“干干净净的代码”原则,使开发者能够快速构建健壮的 Web 应用。它提供了许多组件,如数据库抽象层、缓存、安全、表单处理、文件上传、邮件发送等...

    Zend Framework 框架开发入门教程

    ### Zend Framework 框架开发入门教程 #### 一、简介 本文档旨在提供一个针对初学者的 **Zend Framework** 开发指南。该框架是一种基于 PHP 的开源 Web 应用框架,提供了大量的组件来帮助开发者构建高效且健壮的 ...

    Zend Framework实例教程

    - 命令行下载:使用`wget`命令下载,例如:`$ wget http://framework.zend.com/download/tgz`,接着解压:`$ tar -xvzf ZendFramework-0.1.2.tar.gz`。 ##### 目录结构: - 将下载的`library`目录重命名并放置于...

    zendframework中文手册2010

    综上所述,"zendframework中文手册2010"提供了全面的 Zend Framework 学习资源,无论是初学者还是经验丰富的开发者,都能从中受益,提升PHP编程技能。通过深入学习和实践,可以有效地利用 Zend Framework 构建高质量...

    Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解

    【Zend Framework 动作助手 (Zend_Controller_Action_Helper) 用法详解】 在 Zend Framework 中,动作助手(Action Helper)是一种设计模式,它允许开发者将常用的功能封装起来,以便在需要时方便地在动作控制器...

    zfcn.rar_ZendFramework

    标题"zfcn.rar_ZendFramework"暗示了这是一个关于 Zend Framework 的学习资源,可能是某个教程或文档的压缩包。"zfcn.rar"可能是文件的压缩格式,通常rar是用于压缩文件的一种常见格式。而"_ZendFramework"这部分...

    ZendFramework-1.12.9 手册 (HTML版)

    Zend Framework 是一个开源、基于组件的 PHP 框架,它遵循 Model-View-Controller (MVC) 设计模式,为开发高质量、可扩展的 Web 应用程序提供了强大的基础。此版本1.12.9是该框架的一个稳定版本,包含了许多经过时间...

    ZendFramework1.7.5

    2. **组件化**:框架由一系列可复用、松散耦合的组件组成,如 Zend_Db(数据库抽象层)、Zend_View(视图引擎)、Zend_Controller(控制器)等,开发者可以根据需要选择使用。 3. **对象关系映射 (ORM)**:Zend ...

    zend framework 中文手册

    描述提到"zend framework zendframework manual 手册,Zend Framework手册 中文版,有一部分还没有汉化",这意味着虽然该手册是中文版本,但可能并非全部内容都已翻译完成,部分原文可能是英文状态。 **Zend ...

    Zend Framework API documentation

    其 API(应用程序编程接口)文档是开发者在使用 Zend Framework 进行开发时的重要参考资料。 **Zend Framework 概述** Zend Framework 是一个开放源代码的 PHP 框架,采用组件式设计,允许开发者根据需求选择和使用...

    zendframework1.12

    2. **MVC 结构**:Zend Framework 实现了 Model-View-Controller 设计模式,用于分离业务逻辑、数据处理和用户界面。这有助于提高代码的可读性和可维护性。 3. **对象关系映射(ORM)**:ZF1 包含了 Zend_Db 和 ...

    zend framework 最新手册

    Zend Framework 是一个开源的、基于 PHP 语言的 Web 应用开发框架,它遵循 Model-View-Controller (MVC) 设计模式,为开发者提供了一套强大的工具和服务,以提高开发效率和代码质量。最新手册针对的是 Zend ...

Global site tag (gtag.js) - Google Analytics