Yii安装
在这一节中,我们用Yii创建了一个应用的基本框架作为起点。为方便起见,我们假定WEB服务的根目录为/wwwroot。对应的访问地址为http://www.example.com/
安装
我们首先安装Yii framework。从yiiframework获取Yii压缩包,将其解压到目录 /wwwroot/yii,再次检查,确保目录/wwwroot/yii/framework存在。
Yii framework可以被安装到系统的任意文件夹,其中的framework目录包含了所有的框架代码,也是发布时唯一需要的目录。一个安装好的Yii框架,可以被多个Yii应用使用。
安装之后,打开浏览器窗口,访问地址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>
要使用上面的命令,必须把php所在的路径添加到环境变量中,以似的可以被直接调用,否则请参考如下命令格式:
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.并填充执行结果。