2.1.1. 简介
Zend_Controller是Zend Framework的MVC体系的核心部份。MVC指Model-View-Controller,是一个用于分离应用逻辑和表现逻辑的设计模式。Zend_Controller_Front实现了Front Controller设计模式,所有的请求都通过front controller(前端控制器)并分发(dispatch)到不同的控制器来处理,分发的过程基于请求的URL。

Zend_Controller体系具有可扩展性,可以通过继承已有的类或者自己写个新的类来实现各种接口和抽象类,也可以编写插件或者助手类(helper)来增强系统的功能。

2.1.2. 入门
如果你想深入了解控制器,请认真看下面几节内容,如果你只是想快速地把系统搭建起来,看这一节。

2.1.2.1. 文件系统的组织结构
首先你要规划好自己的文件结构布局,典型的结构是这样的:

application/controllers/IndexController.phpmodels/views/scripts/index/index.phtmlhelpers/filters/
html/.htaccessindex.php

2.1.2.2. 设置文件根目录
将你的WEB服务器文件根目录指向上面文件布局中的html目录。

2.1.2.3. 创建URL重写规则
创建html/.htaccess,编辑其内容为:

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

在上例中,所有请求(除了对那几个扩展名的文件的请求)都被转向到index.php。如果你想在访问某些扩展名的文件时不转向到index.php,你可以建立自己的URL重写规则,或者直接把扩展名添加到(|)之中去。

注意
上面的重写规则只能用于Apache服务器,如果你使用的是其它服务器,请查看 router的文档. 

2.1.2.4. 创建你的bootstrap文件
(所谓Bootstrap,就相当于一小段引导程序或者入口程序,在ZF中,通常即指index.php,因为我们所有的请求都是从index.php进入的。–Haohappy注) 在设置好 .htaccess文件之后,建立一个新的文件index.php:

<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('/path/to/app/controllers');

这是一个入口文件,目的仅在于启动Zend_Controller_Front。Zend_Controller_Front用于分配请求到不同的控制器。

2.1.2.5. 创建默认的控制器(Action Controller)
在讨论控制器之前,你应该先理解Zend Framework是如何处理HTTP请求的。默认情况下,URL的第一个部份会映射到一个控制器,第二个部份则映射到控制器类中的Action(即控制器类内部的一个方法)。例如:URLhttp://framework.zend.com/roadmap/components,其服务器路径为/roadmap/components,则会映射到roadmap控制器和components Action。如果不存在action,则会调用index这个action。如果控制器不存在,则会自动调用index控制器。(按照Apache的命名惯例,自动映射到DirectoryIndex文件)

接下来,Zend_Controller的dispatcher会根据控制器的名称找到具体的控制器类。通常它会把控制器名称加上Controller。因此,上例中roadmap控制器与类RoadmapController相对应。

类似地,action会映射到控制器类中的一个类方法。默认情下,会被转成小写字母,然后加上Action字符串。因此,上例中components这个action与 componentsAction相对应。最终我们访问URL调用的是RoadmapController->componentsAction()

现在让我们来创建一个默认的控制器和Action方法吧。上面说过,默认的控制器和方法都以“index”命名。打开文件application/controllers/IndexController.php,输入:

<?php
/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';class IndexController extends Zend_Controller_Action
{public function indexAction(){}
}

默认情况下,ViewRenderer会被启用。这意味着只需要简单地下定义一个action方法,就会自动指定一个对应的View脚本,你可在action中直接把内容输出。默认情况下,我们采用Zend_View作为MVC开发的表现层部份。ViewRenderer根据控制器的名称(例如index)和当前的action的名称(例如index)来决定使用哪个模板文件。默认情况下,模板文件使用.phtml作为扩展名。 也就是说,上例中,我们将使用index/index.phtml模板文件。 另外,ViewRenderer自动假设views目录与控制器目录平级,作为视图层的基础目录,而实际的模板文件则放置在views/scripts/ 子目录下。因为我们的模板文件应该是 application/views/scripts/index/index.phtml。

2.1.2.6. 创建你的视图脚本
之前说过,视图脚本(即模板文件)放在application/views/scripts/目录下,而默认的模板是application/views/scripts/index/index.phtml。我们来创建这个文件,加入一些HTML代码:

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>My first Zend Framework App</title>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>

2.1.2.7. 创建你自己的错误控制器
默认情况下,“错误处理器”插件 是已经被注册的。这个插件要求存在一个用于处理错误的控制器。它假设存在一个ErrorController,并且其中有一个名为errorAction的Action:

<?php
/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';class ErrorController extends Zend_Controller_Action
{public function errorAction(){}
}

使用我们之前讨论的目录布局,这个文件将是application/controllers/ErrorController.php,你也需要为它创建一个模板文件,即application/views/scripts/error/error.phtml。其中的内容如下:

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>错误</title>
</head>
<body><h1>出错了</h1><p>出现了一个错误,请重试。</p>
</body>
</html>

2.1.2.8. 访问站点!
创建好了你的第一个控制器和模板,你现在可以打开浏览器来访问看看了! 假设example.com是你的站点域名,那么下面的URL都会带你访问你刚才创建的页面:

http://example.com/

http://example.com/index

http://example.com/index/index

恭喜你! 你已经准备好了,可以开始创建更多的控制器和Action!

2. Zend_Controller 快速入门相关推荐

  1. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  2. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  3. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  4. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  5. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  6. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  7. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  8. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

  9. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

  10. 图文并茂!60页PPT《快速入门python数据分析路线》(附链接)

    一个月不走弯路快速入门学python和python数据分析路线,呕心沥血加班加点做了2天,一共63页,该课件讲的都是路线中的核心知识,今天把该PPT分享给大家,能根据该课件提到的知识有针对性的学,做到 ...

最新文章

  1. 在Linux的Eclipse下搭建Android环境
  2. Vim实战指南(一):基础编辑命令
  3. mysql表内增加一个字段并赋值
  4. 设计模式之 - 简单工厂模式
  5. 【控制】《多无人机协同控制技术》周伟老师-第3章-面向协同控制的无人机单机控制
  6. 对Java泛型的简单理解
  7. 2019matlab中的floyd,基于matlab的floyd算法详解
  8. BZOJ4448:[SCO2015]情报传递
  9. 实现Android 动态载入APK(Fragment or Activity实现)
  10. Eclipse环境安装Python插件PyDev
  11. linux 安装hdf5view 入坑指南
  12. 上传,修改头像的使用
  13. [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
  14. 《站在两个世界的边缘》 程浩,一个认真生活过的人
  15. 一看就懂!小白就能用python爬到又大又白的图片!
  16. 小武学fpgastep6
  17. 搜索引擎蜘蛛 ajax,SEO中的搜索引擎蜘蛛技术探析
  18. 会声会影x4素材_会声会影2020多重修整视频功能与操作
  19. 设计模式学习之锦囊妙计定乾坤
  20. 升级Win11后Win安全中心丢失或者点击没反应的解决方法

热门文章

  1. 获取cookies的简单代码(总结待续)
  2. pageControl设置不居中显示,居左或居右
  3. Notification的使用,以及他的监听方法
  4. 非连续内存区缺页异常处理
  5. 我用超白痴的方法解出了这道题,大家有没有更好的方法
  6. 整理 linux常用命令及工具
  7. Linux 入门记录:七、fdisk 分区工具
  8. 转:工具类之SpannableStringUtils(相信你会爱上它)
  9. Spring-MVC案例:Spitter的笔记
  10. AJAX和select,绑定值,动态加载select的Item值,设置所选的值 (全都是客户端控件)...