Zend_Controller体系具有可扩展性,可以通过继承已有的类或者自己写个新的类来实现各种接口和抽象类,也可以编写插件或者助手类(helper)来增强系统的功能。
如果你想深入了解控制器,请认真看下面几节内容,如果你只是想快速地把系统搭建起来,看这一节。
首先你要规划好自己的文件结构布局,典型的结构是这样的:
application/ controllers/ IndexController.php models/ views/ scripts/ index/ index.phtml helpers/ filters/ html/ .htaccess index.php
将你的WEB服务器文件根目录指向上面文件布局中的html目录。
创建html/.htaccess,编辑其内容为:
RewriteEngine on RewriteRule !.(js|ico|gif|jpg|png|css)$ index.php
在上例中,所有请求(除了对那几个扩展名的文件的请求)都被转向到index.php。如果你想在访问某些扩展名的文件时不转向到index.php,你可以建立自己的URL重写规则,或者直接把扩展名添加到(|)之中去。
(所谓Bootstrap,就相当于一小段引导程序或者入口程序,在ZF中,通常即指index.php,因为我们所有的请求都是从index.php进入的。--Haohappy注) 在设置好 .htaccess文件之后,建立一个新的文件index.php:
Zend_Controller_Front::run('/path/to/app/controllers');
这是一个入口文件,目的仅在于启动Zend_Controller_Front。Zend_Controller_Front用于分配请求到不同的控制器。
在讨论控制器之前,你应该先理解Zend Framework是如何处理HTTP请求的。默认情况下,URL的第一个部份会映射到一个控制器,第二个部份则映射到控制器类中的Action(即控制器类内部的一个方法)。例如:URLhttp://framework.zend.com/roadmap/components,其服务器路径为/roadmap/components,则会映射到roadmap控制器和componentsAction。如果不存在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,输入:
/** Zend_Controller_Action */ 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。
之前说过,视图脚本(即模板文件)放在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>
默认情况下,“错误处理器”插件 是已经被注册的。这个插件要求存在一个用于处理错误的控制器。它假设存在一个ErrorController,并且其中有一个名为errorAction的Action:
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>
发布时间:2014-06-04
发布时间:2011-03-08
发布时间:2010-12-30
发布时间:2015-06-22
发布时间:2011-01-24
发布时间:2016-08-15
发布时间:2011-01-15
发布时间:2010-11-06
发布时间:2011-03-18
发布时间:2011-01-06
发布时间:2011-01-18
发布时间:2011-02-19