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!

相关文章推荐

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

Angular入门进阶版 控制器(controller)

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

开始创建应用框架 为了创建我们的应用,我们将使用ZendSkeletonApplication在GitHub上面可访问。使用Composer(http://getcomposer.org)工具来创建...

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

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

zend framework 1.8快速入门

  • 2012-11-08 15:10
  • 543KB
  • 下载

WebSocket 框架快速入门(2)

WebSocket 框架快速入门(2) 接上一篇 WebSocket 框架快速入门(1)

<PY><core python programming笔记>C2 快速入门

C2快速入门 程序输出 print 调用str()函数  #带换行 print aline print line1,line2 交换解释调用 repr()函数 aline 程序输入 r...

Angular2.x环境搭建快速入门--最简单教程

Angular2简介:Angular 2 是Google推出的一个跨平台全终端的框架,和目前比较火的React和Vue.js相比,有如下优点: 由于Google的目的是推出一个完整解决方案,所以官方默...

DB2数据库 Java应用开发快速入门实例

DB2 Java应用开发入门 1.准备 本文简单介绍如何使用Java连接DB2数据库以及简单操作数据库 开发环境:DB2 Express-C 11、SUSE Linux 11 SP4、...

Hibernate基础:快速入门(2):JDBC方式访问数据库

溯本追源,Hibernate最初的做法是在JDBC上对ORM的一层封装,在这篇文章中,我们会搭建一个简单的Project使之能够运行Hibernate的程序,但是对一个程序我们要看一下JDBC是怎样做...

C++ Primer 学习笔记_2_快速入门(续)

 P15习题 [cpp] view plaincopyprint? //题1.14: 试分析如果v1 == v2的情况下,该程序的输出结果  #include    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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