4.2. 入门

4.2.1. 简介

Zend_Controller体系具有可扩展性,可以通过继承已有的类或者自己写个新的类来实现Zend_Controller_Router_Interface或Zend_Controller_Dispatcher_Interface接口。

4.2.2. 服务器设置

Zend_Controller 支持比较漂亮的URI(没有乱七八糟的查询参数),这需要你的服务器支持URI重写功能。如果你使用Apache服务器,可以通过设置mod_rewrite模块来实现。

第一步,首先安装Apache并启用mod_rewrite模块。然后把两个文件放到根目录下:.htaccess和index.php。 .htaccess文件用来让服务器读取,其中必须包含一个mod_rewrite的重写规则,使所有请求都被重定向到index.php。下面是个例子:

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

在上例中,所有请求(除了对那几个扩展名的文件的请求)都被转向到index.php。在开发中这是很有用的,当然在程序正式运行时重写规则应该写成把某些目录排除而不是文件。

4.2.3. Bootstrap文件

(Bootstrap相当于一小段引导程序,如果你用过Struts或Phrame,可能会有一点了解--Haohappy注)

在设置好 .htaccess文件之后,建立一个新的文件index.php,这是一个入口文件,目的在于启动Zend_Controller_Front。Zend_Controller_Front最好要放在你的站点根目录以外。

[注意] 注意
bootstrap文件必须是根目录下唯一的PHP文件。

出处安全方面的考虑,我们强烈建议在所有可能通过服务器访问的目录下(站点根目录的子目录)不放置任何PHP文件。有时候这可能做不到,例如虚拟主机。

建立bootstrap文件:index.php 在根目录中来启动Zend_Controller_Front:

<?php
				
require_once 'Zend/Controller/Front.php';

Zend_Controller_Front::run('/path/to/your/controllers')

?>

看下面的章节来理解 /path/to/your/controllers。就像在README.txt中所介绍的,Zend Framework的library 目录必须在include_path中。如果没有在php.ini中设置,你可以通过set_include_path()函数来设置(放在require_once()之前)。

[注意] 注意
我们现在正在寻找不需要服务器mod_rewrite模块支持的解决方案。我们希望能提供有mod_rewrite和没有mod_rewrite两种情况下的配置。注意:服务器不仅限于Apache和mod_rewrite模块,任何具有类似的功能的服务器都可以。

4.2.4. 目录结构

建议使用 Zend Framework的站点采用相同的目录结构。这样可以让其它熟悉Zend Framework的人更好地理解你的程序。

建议的目录结构包括library目录(Zend自带的或你自己的)和application目录。

/application
  /models
  /views
  /controllers
/document_root
  /images
  /styles
  .htaccess
  index.php
/library
  /Zend

[注意] 注意
这一章节尚未完成,可能会有大量内容补充或修改。

4.2.5. IndexController

每个站点都必须定义一个名为IndexController的控制器。没指定控制器时默认采用这个控制器。如:

http://framework.zend.com/

The IndexController class must be stored in a file named IndexController.php, and this must be stored in the controllers directory. The IndexController must subclass Zend_Controller_Action. Here is a sample IndexController:

<?php
				
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action 
{
	public function indexAction()
	{
		echo 'Hello from IndexController';
	}

	public function noRouteAction()
	{
		$this->_redirect('/');
	}
}

?>

[注意] 注意
这一章节尚未完成,可能会有大量内容补充或修改。