Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307114
  • 博文数量: 76
  • 博客积分: 1662
  • 博客等级: 上尉
  • 技术积分: 764
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 17:04
个人简介

辛勤的鸟儿总能找到虫子....

文章分类

全部博文(76)

文章存档

2017年(1)

2013年(4)

2012年(5)

2011年(4)

2010年(32)

2009年(23)

2008年(7)

分类: 系统运维

2010-08-18 13:57:08

——《PHP Web 2.0 开发实战》基本配置终于搞定
  来自澳大利亚的 PHP 顶级程序员 Quentin Zervaas 不愧是高手中的高手,他的这本《PHP Web 2.0 开发实战》可以堪称是 PHP 界的经典力作。

        在该书最开始的第二章里,作者对 Zend Framework 的配置作了相当灵活的介绍与实现,以致于很多朋友都无法搞懂。所以只要徘徊在大师的教室之外,包括我在内。幸运的是,经过昨天晚上第 N+1 次的尝试,我终于艰难地走出了《PHP Web 2.0 开发实战》的第二章,终于把第二章的基本配置解决了,终于可以开始真正学习这本经典之作了。为了帮助其它跟我一样深感迷惑的朋友,我在下面会分享我的经历。只要你能认真看完这篇文章,相信你一定会走出第二章的阴霾。


        首先说明,我的配置跟书中的一些配置还是有一些不同的,比如,书中的 Controllers 目录在 include 目录下,而我的则在 application 下,当然这些都不会影响正常的实现。

        来看我的目录结构:

注:zfw/application/Smarty 为 Smarty 模板目录;zfw/templates 为 Smarty 模板文件目录。


        我把整个第二章分为两个部分,即基本配置(不含 Smarty)和将 Smarty 模板集成到网站,根据书中的内容,这两部分分别是 2.9 节以前(不含)和 2.9 节以后。

第一部分

        在你配置好跟上面相同的目录树以后,就可以开始我们本次的配置了。(相信你已经完成 WAMP 平台的搭建了吧)

        第一步:在 Zfw 目录下建立三个文件:.htaccess、index.php、settings.ini。.htaccess 的内容直接按书的内容写:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

        settings.ini 也是如此,不过在目录设定上要根据自身配置,内容如下:

[development]

database.type   =pdo_mysql
database.hostname =localhost
database.username =root
database.password =demopin
database.database =phpweb20

paths.base    =/
paths.data     =data  
paths.templates   =templates

log.file      =logs/debug.log

        重点来看 index.php 的内容:

error_reporting(E_ALL);
set_include_path(get_include_path().";"
       .dirname(__FILE__)."\application;"
       .dirname(__FILE__)."\library");

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

   //创建 Front 并显示
$front=Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
$front->setControllerDirectory('application/controllers');
  
$front->dispatch();


        这里需要说明几点:

        1. set_include_path 中把当前目录(zfw)、application 子目录以及 library 子目录(事实上,这个目录最为重要,因为它包括了 Zend 框架)包括了进来。

        2. 最开始的 error_reporting(E_ALL),你可以随时把它注释掉,这里加上它的目的是为了检查错误。即当你发现网页显示不正常时,就去掉它前面的注释,分析错误信息并解决。

        第二步,创建控制器

        在 application\controllers 下建立 IndexController.php 文件,内容如下:

class IndexController extends Zend_Controller_Action{
   public function indexAction(){
    $this->view->name="NBWD";
   }
}
?>

        在 application\views\scripts\index 下建立 index.phtml 文件,内容如下:


  
    Hello, you are name; ?>.  

        现在,打开网站,如果你已看到:Hello, you are NBWD. 恭喜你,初战告捷。

        第三步,扩展控制器

        大师不愧是大师,在接下来的这一点上就足可以证明了。扩展控制器正如书上的引导:建立一个 CustomControllerAction 控制器,继承自 Zend Framework 的标准控制器 Zend_Controller_Action ,之后站点的 IndexController 再继承自那个自定义的控制器。

        CustomControllerAction.php(位于 zfw\application\controllers)的 代码按照书中录入即可。上面的 IndexController.php 的内容变动如下:

require_once "CustomControllerAction.php"; //将自定义控制器包括进来
class IndexController extends CustomControllerAction{
   public function indexAction(){
    $this->view->name="NBWD";
   }
}
?>

        这时,如果再打开网站,会出现异常,根据异常信息可以明显知道,这是由于在 CustomControllerAction 使用了未注册过的 db ,在下面一步中,我们使用 Zend_Registry 组件来完成这个注册。

        第四步,定义应用配置和连接数据库(书中 2.7 节和 2.8 节)

        关于 settings.ini 的内容以及它的位置,在第一步中已经讲明。将zfw/index.php 文件内容更新如下:

//error_reporting(E_ALL);

set_include_path(get_include_path().";"
       .dirname(__FILE__)."\application;"
       .dirname(__FILE__)."\library");

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

//配置
$config=new Zend_Config_Ini('settings.ini','development');
Zend_Registry::set('config',$config);

//数据库
$params=array('host'=>$config->database->hostname,
        'username'=>$config->database->username,
        'password'=>$config->database->password,
        'dbname'=>$config->database->database
       );
$db=Zend_Db::factory($config->database->type,$params);
Zend_Registry::set('db',$db);

//创建 Front 并显示
$front=Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
$front->setControllerDirectory('application/controllers');
  
$front->dispatch();
?>

        这时,再刷新站点主面,正常显示跟原先一样。

        完成到这一步时,第一部分的任务已经顺利完成,因为我们马上要进入第二部分——集成 Smarty和日志功能,这又是一个新的挑战,Let's GO!

第二部分

        第一步,模板类的创建

        如前面的目录树一样,将下载下来的 Smarty 放到 zfw/application 下面。接下来开始 Templater.php 的编写。先说明一下,书中曾提到该文件要与 Zend 框架的类命名结构相一致,这意味着必须将这个类存放在 ./include 目录中。而在本例中,经过我的测试,该文件放到 zfw/application 或 zfw/library 下面都可以(这是因为 set_include_path 的原因),建议你将它放到 zfw/library 目录下。
Templater.php 的文件内容,按照书中的内容录入即可。

        第二步,集成 Smarty

        在 index.php 中 Zend_Registry::set('db',$db); 一句后加入如下代码:

//集成 Smarty
$vr=new Zend_Controller_Action_Helper_ViewRenderer();
$vr->setView(new Templater());
$vr->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($vr);

        第三步,建立 Smarty 模板文件

        在 zfw/templates/index 目录下建立 index.tpl 文件。文件内容无所谓:Hello, world ,即可。或者像书中一样建立完整的 HTML 文档。

        这时,刷新站点页面,将会显示这个模板的内容,如果你看到了 Hello, world,再次恭喜你,集成 Smarty 成功。

        第四步,增加日志功能

在 index.php 中加上如下代码:

//日志
$logger=new Zend_Log(new Zend_Log_Writer_Stream($config->log->file));
Zend_Registry::set('logger',$logger);
$logger->debug('TEST');

        然后,在 zfw/logs 下面建立 debug.log 文件。这时,再次刷新网页,来查看 debug.log 文件,已经增加一条日志信息,OK,顺利加入日志功能。

        到了这里,终于把第二章的配置完成了,相信这是一个不小的成功。所谓“一夫当关,万夫莫开”,第二章就好比那“一夫”,如今你已经把第二章顺利拿下,那么接下来的学习就应该顺利了。如果有哪位朋友对上面的步骤有不懂的地方,可以留言。另外,我本人目前也在学习这本书,如果愿意交流,请留下你的联系方式,欢迎交流,共同进步。

        如果您对本文中介绍的方法有何意见或建议,请留下您的高见,欢迎交流。本文由 NBWD 原创,请放心转载。

附: 《PHP Web 2.0 开发实战》原书封面

阅读(753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~