Yii安装
在这一节中,我们用Yii创建了一个应用的基本框架作为起点。为方便起见,我们假定WEB服务的根目录为/wwwroot。对应的访问地址为http://www.example.com/
安装
我们首先安装Yii framework。从yiiframework获取Yii压缩包,将其解压到目录 /wwwroot/yii,再次检查,确保目录/wwwroot/yii/framework存在。
安装之后,打开浏览器窗口,访问地址http://www.example.com/yii/requirements/index.php。 这将显示Yii包里提供的配置需求检查。请确保我们的WEB服务器和PHP配置符合Yii配置需求的最低要求。尤其是,我们要确保php的pdo扩展和 pdo_sqlite模块启用,因为在接下来的blog应用中我们需要以上扩展来连接SQLite数据库。可以查看到的配置大体如下图。
建立应用的基本框架
我们使用Yiic工具,在目录/wwwroot/blog.下建立应用的基本框架。Yii包里提供的Yiic工具是个命令行工具,它可以对一些任务(task)生成代码。
打开一个命令行窗口执行如下命令
% /wwwroot/yii/framework/yiic webapp /wwwroot/blog
Create a Web application under '/wwwroot/blog'? [Yes|No]y
......
我本机的yiiframework保存在E:\web\yii\framework。命令行执行情况如下:
E:\web\yii\framework>yiic webapp e:/web/yii\blog Create a Web application under 'E:\web\yii\blog'? [Yes|No] y mkdir E:/web/yii/blog mkdir E:/web/yii/blog/assets generate assets/.yii mkdir E:/web/yii/blog/css generate css/bg.gif generate css/form.css generate css/main.css mkdir E:/web/yii/blog/images generate images/.yii generate index.php mkdir E:/web/yii/blog/protected generate protected/.htaccess mkdir E:/web/yii/blog/protected/commands mkdir E:/web/yii/blog/protected/commands/shell generate protected/commands/shell/.yii mkdir E:/web/yii/blog/protected/components generate protected/components/MainMenu.php generate protected/components/UserIdentity.php mkdir E:/web/yii/blog/protected/components/views generate protected/components/views/mainMenu.php mkdir E:/web/yii/blog/protected/config generate protected/config/console.php generate protected/config/main.php mkdir E:/web/yii/blog/protected/controllers generate protected/controllers/SiteController.php mkdir E:/web/yii/blog/protected/extensions generate protected/extensions/.yii mkdir E:/web/yii/blog/protected/messages generate protected/messages/.yii mkdir E:/web/yii/blog/protected/models generate protected/models/ContactForm.php generate protected/models/LoginForm.php mkdir E:/web/yii/blog/protected/runtime generate protected/runtime/.yii mkdir E:/web/yii/blog/protected/views mkdir E:/web/yii/blog/protected/views/layouts generate protected/views/layouts/main.php mkdir E:/web/yii/blog/protected/views/site generate protected/views/site/contact.php generate protected/views/site/index.php generate protected/views/site/login.php mkdir E:/web/yii/blog/protected/views/system generate protected/views/system/.yii generate protected/yiic generate protected/yiic.bat generate protected/yiic.php mkdir E:/web/yii/blog/themes mkdir E:/web/yii/blog/themes/classic mkdir E:/web/yii/blog/themes/classic/views generate themes/classic/views/.htaccess mkdir E:/web/yii/blog/themes/classic/views/layouts generate themes/classic/views/layouts/.yii mkdir E:/web/yii/blog/themes/classic/views/site generate themes/classic/views/site/.yii mkdir E:/web/yii/blog/themes/classic/views/system generate themes/classic/views/system/.yii Your application has been created successfully under E:\web\yii\blog. E:\web\yii\framework>
path/to/php path/to/yii/framework/yiic.php webapp path/to/blog
测试我们新建立应用,可以访问地址http://www.example.com/blog/index.php我们可以看到我们的应用有三个完整的页面,主页、联系我们和用户登录。
接下来我们简要的说明下我们的应用框架中都有什么。
入口程序
我们有一个入口程序,存放在/wwwroot/blog/index.php,内容如下
- <?php
- // yii引导文件的路径 以及配置文件main.php的路径。
- $yii='E:\web\yii\framework\yii.php';
- $config=dirname(__FILE__).'/protected/config/main.php';
- // 正式环境下应该去掉,以提高性能,打开debug有利于调试
- defined('YII_DEBUG') or define('YII_DEBUG',true);
- //加载并运行
- require_once($yii);
- Yii::createWebApplication($config)->run();
这是唯一被web用户访问的脚本,代码首先加载yii的引导文件yii.php,然后用配置文件生成一个yii实例,并运行。
程序的基本目录
应用程序的基本目录在/wwwroot/blog/protected下面,大多数的代码和数据都保存在这下面。这个目录应该被保护起来以防止web用户的直接访问。对apache的WEB服务器,我们可以在这个目录下建立.htaccess文件。内容如下
deny from all
对于其他类型的WEB服务器,请参考相关手册中关于如何阻止用户直接访问的内容。
应用的工作流程
为了帮助理解Yii是如何工作的。我们介绍了,当用户访问联系我们页面时,我们的应用框架的主要工作流程
- 服务器执行入口程序也就是index.php来处理用户请求。
- 根据配置文件/wwwroot/blog/protected/config/main.php中的属性,创建一个应用程序实例
- 应用程序把请求分配给一个controller(控制器)和controller action(控制器的动作)进行响应,对联系我们页面来说,是分配给site控制器(Controller)和content 动作(action)进行响应。
- 应用程序建立一个名为SiteController的Site 控制器(Controller)实例,并执行
- SiteController实例通过actionContact方法来执行contact 动作(action)
- actionContact方法加载content视图展示给用户。内部实现为加载视图文件/wwwroot/blog/protected/views/site/contact.php,到布局文件/wwwroot/blog/protected/views/layouts/main.php.并填充执行结果。