2. Zend_Controller 快速入门

翻译 2015年07月06日 22:33:14

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.php
    models/
    views/
        scripts/
            index/
                index.phtml
        helpers/
        filters/
html/
    .htaccess
    index.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!

快速入门shell脚本编写(二)

上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vim要比vi好用许多。 这次接着上次的内容,基础知识,继续学习,本文作者...
  • hnulwt
  • hnulwt
  • 2015年01月26日 20:26
  • 3621

《Qt Creator快速入门》(第二版,霍亚飞)自学笔记 2.2.3设置应用程序图标

如何生成有图标的exe文件? 在Qt Creator的help->index在look for 里输入Setting the Application Icon关键字,这里列出了在各个平台上设置应用程序...
  • diqiuyun
  • diqiuyun
  • 2016年01月04日 15:01
  • 1412

干货--Redis 30分钟快速入门

一、redis 环境搭建2 二、redis学习笔记之数据类型3 三、redis学习笔记之排序11 四、redis学习笔记之事务16 五、redis学习笔记之pipeline20 六、redis学习笔记...
  • tanggao1314
  • tanggao1314
  • 2016年04月10日 21:56
  • 7681

Angular快速入门2 ---控制器(controller)

Angular入门进阶版 控制器(controller)
  • songchuncao
  • songchuncao
  • 2017年04月26日 20:14
  • 158

《Zend Framework2.0最新版本快速入门手册》【第二篇】(CSDN首发中!!支持围观)

开始创建应用框架 为了创建我们的应用,我们将使用ZendSkeletonApplication在GitHub上面可访问。使用Composer(http://getcomposer.org)工具来创建...
  • youlinggu
  • youlinggu
  • 2013年01月10日 08:24
  • 1642

《Zend Framework2.0最新版本快速入门手册》【第一篇】(CSDN首发中!!支持围观)

本教程是,使用基于MVC架构创建一个简单的数据库驱动的应用来介绍zend框架2.0版本的内容。整个教程实践结束,你会学会开发一个基于ZF2的应用,并且还能直接查看源代码,了解里面它是如何跑起来的,内部...
  • youlinggu
  • youlinggu
  • 2013年01月10日 07:56
  • 1979

MVC5开发前端框架AngularJS快速入门之Controller

先看看AngularJS官方对Controller的解释 在Angular中,控制器就像 JavaScript 中的构造函数一般,是用来增强 Angular作用域(scope) 的。 当一个控制器通过...
  • huangyezi
  • huangyezi
  • 2015年04月29日 23:22
  • 18921

在ZF2中实现Zend Framework的Controller init/preDispatch/postDispatch方法

在Zend Framework 1中,Controller里约定了一些默认的方法来实现钩子,包括 Controller初始化时调用的init()方法派遣前的方法preDispatch()派遣后的...
  • wang_quan_li
  • wang_quan_li
  • 2014年10月28日 18:13
  • 520

selenium2初学者快速入门

  • 2016年03月31日 19:54
  • 3.67MB
  • 下载

App Inventor 2快速入门与实战 源码

  • 2017年11月28日 09:06
  • 19.28MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2. Zend_Controller 快速入门
举报原因:
原因补充:

(最多只允许输入30个字)