Yii 之初体验
在这一部分里,我们将讲解怎样建立一个程序的骨架作为着手点。为简单起见,我们假设Web服务器根目录是 /wwwroot ,相应的URL是 http://www.example.com/。
安装Yii
首先,我们来安装Yii框架。 从 www.yiiframework.com 获取一份Yii的拷贝,解压缩到 /wwwroot/yii。再次检查以确保 /wwwroot/yii/framework 目录存在。
提示: Yii框架可以安装在文件系统的任何地方,而不是必须在Web目录中。它的
framework目录包含了框架的代码,这也是部署Yii应用时唯一一个必要的目录。一个单独的Yii安装可以被用于多个Yii应用。
Yii安装完毕之后,打开浏览器访问URL http://www.example.com/yii/requirements/index.php。它将显示Yii提供的需求检查程序。对我们的Blog应用来说,除了Yii所需的最小需求之外,我们还需要启用 pdo 和 pdo_sqlite 这两个PHP 扩展。这样我们才能访问SQLite数据库。
创建应用骨架
然后,我们使用 yiic 工具在 /wwwroot/blog 目录下创建一个应用骨架。yiic 工具是在Yii发布包中提供的命令行工具。它可以用于创建代码以减少某些重复的编码工作。
打开一个命令行窗口,执行以下命令:
% /wwwroot/yii/framework/yiic webapp /wwwroot/blog Create a Web application under '/wwwroot/blog'? [Yes|No]y ......
提示: 为了使用上面提到的
yiic工具,CLI PHP 程序必须在命令搜索路径内(译者注:即 php.exe 所在的目录必须在PATH环境变量中),否则,可能要使用下面的命令:path/to/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog
要查看我们刚创建的应用,打开浏览器访问 URL http://www.example.com/blog/index.php。可以看到我们的程序骨架已经有了四个具备完整功能的页面:首页(Home),“关于”页(About),联系页(Contact)和登录页(Login)。
接下来,我们简单介绍一下在这个程序骨架中的内容。
入口脚本
我们有一个入口脚本 文件 /wwwroot/blog/index.php ,内容如下:
$yii='/wwwroot/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following line when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); require_once($yii); Yii::createWebApplication($config)->run();
这是唯一一个网站用户可以直接访问的脚本。此脚本首先包含了Yii的引导文件 yii.php。然后它按照指定的配置创建了一个应用 实例并执行此应用。
基础应用目录
我们还有一个 应用基础目录 /wwwroot/blog/protected。我们主要的代码和数据将放在此目录下,它应该被保护起来,防止网站访客的直接访问。针对 Apache httpd 网站服务器 ,我们在此目录下放了一个 .htaccess 文件,其内容如下:
deny from all
对于其他的网站服务器,请参考相应的关于保护目录以防止被访客直接访问的相关文档。
应用的工作流程
为了帮你理解Yii是怎样工作的,对于我们的程序骨架,当有人访问它的联系页(Contact)时,我们对它的工作流程描述如下:
- 用户请求此 URL
http://www.example.com/blog/index.php?r=site/contact; - 入口脚本 被网站服务器执行以处理此请求;
- 一个 应用 的实例被创建,其配置参数为
/wwwroot/blog/protected/config/main.php应用配置文件中指定的初始值; - 应用分派此请求到一个 控制器(Controller) 和一个 控制器动作(Controller action)。对于联系页(Contact)的请求,它分派到了
site控制器和contact动作 (即/wwwroot/blog/protected/controllers/SiteController.php中的actionContact方法); - 应用按
SiteController实例创建了site控制器并执行; SiteController实例通过调用它的actionContact()方法执行contact动作;actionContact方法为用户渲染一个名为contact的 视图(View) 。在程序内部,这是通过包含一个视图文件/wwwroot/blog/protected/views/site/contact.php并将结果插入 布局 文件/wwwroot/blog/protected/views/layouts/column1.php实现的。