没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
使用Yii来建立博客
此教程描述了使用Yii开发一个演示博客的过程。此博客同时可以在Yii发布包里找到。它详细讲解了开发
中的每个步骤,这些步骤可能同样适用于其他Web应用的开发。作为对Yii指南和类参考 的补充, 此教程旨
在展示Yii的实际使用,而不是详尽具体的使用说明。
读者不需要预先了解关于Yii的知识,但具备基本的面向对象编程(OOP)和数据库编程知识会使读者更
容易理解此教程。
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 ,内容如下:
<?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)时,我们对它
的工作流程描述如下:
1. 用户请求此 URL http://www.example.com/blog/index.php?r=site/contact;
2. 入口脚本 被网站服务器执行以处理此请求;
3. 一个 应用 的实例被创建,其配置参数为/wwwroot/blog/protected/config/main.php 应用配置文件中
指定的初始值;
4. 应用分派此请求到一个 控制器(Controller) 和一个 控制器动作(Controller action)。对于联系
页(Contact)的请求,它分派到了 site 控制器和 contact 动作 (即 /wwwroot/blog/protected/
controllers/SiteController.php 中的 actionContact 方法);
5. 应用按 SiteController 实例创建了 site 控制器并执行;
6. SiteController 实例通过调用它的 actionContact() 方法执行 contact 动作;
7. actionContact 方法为用户渲染一个名为 contact 的 视图(View) 。在程序内部,这是通过包含一
个视图文件 /wwwroot/blog/protected/views/site/contact.php 并将结果插入 布局 文件 /wwwroot/
blog/protected/views/layouts/column1.php 实现的。
需求分析
我们要开发的博客系统是一个单用户系统。系统的所有者可以执行以下操作:
•
登录和退出
•
创建,更新,删除日志
•
发布,撤销发布,存档日志
•
审核和删除评论
其他的访客则可以执行以下操作:
•
阅读日志
•
创建评论
此系统的额外需求包括:
•
系统的首页应显示最新的帖子列表。
•
如果页面中有超过10篇日志,应该以分页的方式显示。
•
系统应该在显示日志的同时显示此日志的评论。
•
系统应可以按照指定的Ta g 列出相应的日志。
•
系统应展示一个可以表明标签使用频率的标签云。
•
系统应展示一个最新评论列表。
•
系统应可以更换主题。
•
系统应使用 SEO 友好的 URL 。
整体设计
基于需求分析,我们决定为我们的博客应用使用如下数据表存储持久数据:
•
tbl_user 存储用户信息,包括用户名和密码。
•
tbl_post 存储博客日志信息。它由如下几列组成:
o
title: 必填项,日志的标题;
o
content: 必填项,日志的内容,使用 Markdown 格式;
o
status: 必填项,日志的状态,可以是以下值之一:
!
1, 表示日志在草稿箱里,对外不可见;
!
2, 表示日志已经对外发布;
!
3, 表示日志已经过期,在日志列表中不可见(但仍然可以单独访问)。
o
tags: 可选项,用于对日志归类的一个以逗号分隔的词语列表。
•
tbl_comment 存储日志评论信息,每条评论关联于一篇日志,主要包含如下几列:
o
name: 必填项, 作者名字;
o
email: 必填项, 作者 Email;
o
website: 可选项, 作者网站的 URL;
o
content: 必填项, 纯文本格式的评论内容;
o
status: 必填项, 评论状态,用于表示日志是(2)否(1)已通过审核。
•
tbl_tag 存储日志Ta g 使用频率信息,用于实现标签云效果。此表主要包含以下几列:
o
name: 必填项, 唯一的Ta g 名字;
o
frequency: 必填项,Tag 出现在日志中的次数。
•
tbl_lookup 存储通用查找信息。它本质上是一个整型数字和文本字符的映射。前者是我们的代码
中的数据表现,后者是相应的对最终用户的表现。例如,我们使用整数1表示草稿日志,而使
用字符串“草稿”把此状态显示给最终用户。此表主要包含以下几列:
o
name: 数据项的文本表现形式,用于显示给最终用户;
o
code: 数据项的整数表现形式;
o
type: 数据项的类型;
o
position: 同类数据项中,数据项相对于其他数据项的显示顺序。
如下的实体-关系(ER)图展示了上述表的表结构和他们之间的关系。
博客数据库实体-关系图
上述ER图相应的完整SQL语句可以在 博客演示 中找到。在我们的安装包中,它们位于 /wwwroot/yii/
demos/blog/protected/data/schema.sqlite.sql。
信息: 我们对所有表和列的命名使用了小写字母。这是因为不同的 DBMS 通常有不同的大小写敏感处理方
式,我们通过这种方式来避免这种问题。
我们同时对所有的表使用了 tbl_ 前缀。这出于两个目的。第一,此前缀对这些表提供了一个命名空间以
使他们和同一数据库中的其他表共存,此情况常出现在在共享的主机环境中,一个数据库常被多个应用
使用。第二,使用表前缀减少了表名中出现DBMS保留字的可能。
我们把博客应用的开发划分为如下几个阶段:
•
阶段 1: 创建一个博客系统的原型。它应该包括大多数所需的功能。
•
阶段 2: 完善日志管理功能。包括日志的创建,日志列表,日志显示,日志更新和删除。
•
阶段 3: 完善评论管理功能。包括评论创建,评论列表,审核,更新以及日志评论的删除。
•
阶段 4: 实现 Portlets。它包括用户菜单,登录,标签云和最新评论Portlets。
•
阶段 5: 最终调试和部署。
建立数据库
完成了程序骨架和数据库设计,在这一节里我们将创建博客的数据库并将其连接到程序骨架中。
创建数据库
我们选择创建一个SQLite数据库。由于Yii中的数据库支持是建立在 PDO 之上的,我们可以很容易地切换
到一个不同的 DBMS (例如 MySQL, PostgreSQL) 而不需要修改我们的应用代码。
我们把数据库文件 blog.db 建立在 /wwwroot/blog/protected/data 中。注意,数据库文件和其所在的目录都
必须对Web服务器进程可写,这是SQLite的要求。我们可以简单的从博客演示中复制这个数据库文件,它
位于 /wwwroot/yii/demos/blog/protected/data/blog.db。我们也可以通过执行 /wwwroot/yii/demos/blog/
protected/data/schema.sqlite.sql 文件中的SQL语句自己创建这个数据库。
提示: 要执行SQL语句,我们可以使用 sqlite3 命令行工具。它可以在 SQLite 官方网站 中找到。
建立数据库连接
要在我们创建的程序骨架中使用这个数据库,我们需要修改它的应用配置 ,它保存在PHP脚本 /wwwroot/
blog/protected/config/main.php 中。此脚本返回一个包含键值对的关联数组,它们中的每一项被用来初始化
应用实例 中的可写属性。
我们按如下方式配置 db 组件,
return array(
'components'=>array(
'db'=>array(
'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
'tablePrefix'=>'tbl_',
),),);
上述配置的意思是说我们有一个 db 应用组件 ,它的 connectionString 属性应当以 sqlite:/wwwroot/blog/
protected/data/blog.db 这个值初始化,它的 tablePrefix 属性应该是 tbl_。
通过这个配置,我们就可以在代码的任意位置使用 Yii::app()->db 来访问数据库连接对象了。注意,
Yii::app() 会返回我们在入口脚本中创建的应用实例。如果你对数据库连接的其他可用的方法和属性感兴
趣,可以阅读 类参考。然而,在多数情况下,我们并不会直接使用这个数据库连接。而是使用被称为
ActiveRecord 的东西来访问数据库。
我们想对配置中的 tablePrefix 属性再解释一点。此属性告诉 db 连接它应该关注我们使用了 tbl_ 作为数据
库表前缀。具体来说,如果一条SQL语句中含有一个被双大括号括起来的标记 (例如 {{post}}),那么 db 连
接应该在把它提交给DBMS执行前,先将其翻译成带有表前缀的名字 (例如 tbl_post) 。这个特性非常有
用,如果将来我们需要修改表前缀,就不需要再动代码了。例如,如果我们正在开发一个通用内容管理
系统 (CMS),我们就可以利用此特性,这样当它被安装在一个不同的环境中时,我们就能允许用户选择一
个他们喜欢的表前缀。
提示: 如果你想使用MySQL而不是SQLite来存储数据,你可以使用位于 /wwwroot/yii/demos/blog/protected/
data/schema.mysql.sql 文件 中的SQL语句创建一个名为 blog 的 MySQL 数据库。然后,按如下方式 修改应
用配置,
return array(
'components'=>array(
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=blog',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
),),);
脚手架
创建,读取,更新,删除 (CRUD) 是应用的数据对象中的四个基本操作。由于在Web应用的开发中实现
CURD的任务非常常见,Yii 为我们提供了一些可以使这些过程自动化的代码生成工具,名为 Gii (也被称
为 脚手架) 。
注意: Gii 从 Yii 1.1.2 版开始提供。在这之前,你可能需要使用 yiic shell tool 来实现相同的任务。
下面,我们将阐述如何使用这个工具来实现博客应用中的CRUD操作。
剩余30页未读,继续阅读
资源评论
codeyell-com
- 粉丝: 88
- 资源: 71
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功