Zend_Controller 支持比较漂亮干净的URI(没有乱七八糟的查询参数)。建议你配置服务器,使所有用户请求集中到一个文件,即index.php,index.php将会启动Zend_Controller_Front
。如果你使用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。在开发中这是很有用的,当然在程序正式运行时重写规则应该写成把某些目录排除而不是文件。
bootstrap文件的位置 | |
---|---|
bootstrap文件(即index.php)应当是站点根目录下唯一一个PHP文件。 |
Zend_Controller也支持使用查询字符串的URL,例如: index.php?controller=foo&action=bar
。另外,Zend_Controller所带的一个router--Zend_Controller_RewriteRouter
,可以让程序不使用服务器所带的mod_rewrite功能,就可进行URL重写。这样即使你在你的主机上无法使用mod_rewrite,你仍然可以使用Zend_Controller。
(所谓Bootstrap,就相当于一小段引导程序或者入口程序,在ZF中,通常即指index.php,因为我们所有的请求都是从index.php进入的。--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()之前)。
建议使用 Zend Framework的站点采用相同的目录结构,尽管可能不是每个站点都能一模一样。这样可以让其它熟悉Zend Framework的人更好地理解你的程序。
建议的目录结构包括library目录(Zend自带的或你自己的)和application目录。
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
注意 | |
---|---|
这一章节尚未完成,可能会有大量内容补充或修改。 |
每个站点都必须定义一个默认的控制器,当用户访问的URI中没有指定控制器时,就会调用该控制器,例如:
http://framework.zend.com/
在自带的配置中,默认控制器是IndexController
,它是在文件IndexController.php
中定义的。在内部访问中,该控制器的名称是'index'。
你可以通过调用front controller的setDefaultController()
方法来改变默认的控制器。在使用时,请使用内部命名原则,也就是说类HomeController
(位于文件HomeController.php
中)应该以'home
'的名称来访问。
控制器应该继承自Zend_Controller_Action
类,并放置于controllers目录下。
<?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('/'); } } ?>
关于默认控制器和action的更多细节,例如如何编写controller类等,会在后面的章节介绍。
注意 | |
---|---|
本章节还未完成,可能会有很多内容被更新。 |