Yii实例之开发简单新闻系统

yii
Yii实例之开发简单新闻系统之二Controller操作

最近比较忙, 项目快上线了, 每天不停的改bug, 调试, 博文基本没动, 群里很多朋友都在等我的Yii开发系列的文章, 在这里向大家说声抱歉了, 感谢大家的支持, 这个系列一定会结束的, 只是会需要些时间, 希望大家继续关注.

本讲主要分析Yii的controller的操作, 我们先来看一下Controller里都有哪些属性供我们使用:
$pageTitle – 设定该页面的title
$layout – 设定该action所使用的layout

使用它们的方法很简单, $this->title = “欢迎来到本博客”;, 这样就够了.

下面再来看一下controller提供的方法有哪些:
render(string $view, array $data=NULL, boolean $return=false) – 渲染一个页面, $view为要渲染的页面, $data为传递到页面的参数
redirect(mixed $url, boolean $terminate=true, integer $statusCode=302) – 跳转页面到某个action, $url为要跳转的地址, $url为string的时候, 则跳到该地址, $url为数组的时候, 则跳到该数组指向的地址

这2个方法是在action中常用的方法了. 当然, controller里不只这2个属性和方法, 还有很多, 可以查阅api得到详细列表.

这里要详细介绍一个比较特殊的方法, 那就是accessRules方法, 这是yii所使用的默认权限检查方法了, 我们来看一个例子:
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'list' and 'show' actions
'actions'=>array('list','show'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}

上面一个有4个检查权限的数组, 检查权限的时候, 从上至下的检查, 首先检查’users’=>array(‘*’)这一个数组, 这个数组里的actions, 所有的用户都可以访问, *表示所有用户. 再看第二个, ‘users’=>array(‘@’), 这个数组的actions, 只有登陆用户才可以访问, 对了, @表示登陆用户. 那么第三个呢? 嘿嘿, 这个就更好理解了, ‘users’=>array(‘admin’)表示只有用户名为admin的用户才可以访问这里面的actions. 怎么样, yii的基于用户名的权限管理够简单吧.

Tags: yii
浏览数:4647 次 星期一, 11月 8th, 2010 php框架 没有评论
Yii实例之开发简单新闻系统之二Model操作

前面三节讲了如何建立项目, 如何设置项目和如何注册和登录. 里面涉及了一些Model和Controller层的操作, 但是没有仔细讲过如何使用它们, 接下来两讲将分别讲述Model层和Controller层的操作, 在以后的课程中, 再遇到这些操作, 只会挑重点的讲了.

这一讲主要讲M层的操作.
首先, 是对M层的一些设置, 这里有个几个重要的函数, 前面已经介绍过了, 这里再做个详细的介绍:
tableName – 设置Model所对应的表名
rules – 设置Model里各字段的验证规则
relations – 设置关联规则
attributeLabels – 设置各字段的别名
safeAttributes – 设置可以修改属性的字段
beforeValidate和afterValidate – 字段验证前和验证后执行的函数, 需要返回true值
beforeSave和afterSave – 记录存储前和存储后执行的函数, 需要返回true值

其次, Yii里的ORM使用的是AR, 有几个主要的操作, 分别是:
save – 操作数据
update – 修改数据
delete – 删除数据
validate – 验证数据

读取记录时, 有以下几个方法:
findByPk – 通过主键查找记录, 结果为单条记录
findByAttribute – 通过属性查找记录, 结果为单条记录
findAllByAttributes – 通过属性查找数据, 结果为记录集
findAll – 通过CDbCriteria对象查找数据, 结果为记录集 *

查找方法接收的参数有2种, 没有星号的, 接受数组作为参数, 有星号的接收CDbCriteria对象作为参数, 使用对象的时候, 可以提供更多的查找条件, 下面给出一个实例:
$criteria = new CDbCriteria; // 创建CDbCriteria对象
$criteria->condition = 'title LIKE %' . 'php' . '%'; // 设置查询条件
$criteria->order = 'createdTime DESC'; // 设置排序条件
$criteria->limit = 10; // 限定记录的条数
$criteria->select = 'id,title,content'; // 设置结果所包含的字段

$articles = Article::model()->findAll($criteria); //结果为数组, 其中每个元素为记录对象

再次, Yii对关联数据默认采用LazyLoad的加载形式, 即需要时才读取. 这样, 当我们不需要关联数据的时候, Yii是不会帮我们去读取的, 大大加快了反应的速度. 但是也有一些时候, 我们是需要关联数据的, 比如说读取文章的时候, 我们是需要文章所属的分类的, 如果使用LazyLoad的形式, 就要有多少条, 查询多少次, 效率非常低下, 这时就需要EagerLoad了, 即一次把关联表的数据全部读出.
比如:
$articles = Article::model()->with('category')->findAll();

使用with将关联表的数据一次全部读出. 关联表的设置在Model里的relation里设置.
比如:
public function relations() {
return array(
'category' => array(self::BELONGS_TO, 'Category', 'categoryId'),
);
}

非常的清晰明了.

Tags: yii
浏览数:6403 次 星期一, 11月 8th, 2010 php框架 没有评论
Yii实例之开发简单新闻系统之一

前端时间一直想一个适合新手入门的Yii实例, 一直没有完成, 这个周末有些时间, 把这个教程完成.

首先我们来分析下项目需求:
这个新闻系统, 所有用户可以查新新闻, 但只有注册用户才可以评论新闻.用户可以随便注册成为注册用户.
建表的sql语句如下:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- 数据库: `shiehnews`
--

-- --------------------------------------------------------

--
-- 表的结构 `articles`
--

CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL auto_increment,
`userId` int(11) NOT NULL,
`categoryId` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`createdTime` int(11) NOT NULL,
`modifiedTime` int(11) NOT NULL,
`content` text NOT NULL,
`viewNum` int(11) NOT NULL default '0',
`commentNum` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `fk_articles_users` (`userId`),
KEY `fk_articles_categories` (`categoryId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `categories`
--

CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `comments`
--

CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) NOT NULL auto_increment,
`userId` int(11) NOT NULL,
`articleId` int(11) NOT NULL,
`comment` text NOT NULL,
`createdTime` int(11) NOT NULL,
`modifiedTime` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_comments_articles` (`articleId`),
KEY `fk_comments_users` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`articleNum` int(11) NOT NULL default '0',
`commentNum` int(11) NOT NULL default '0',
`email` varchar(50) NOT NULL,
`nickname` varchar(50) default NULL,
`createdTime` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

下载Yii框架, 我使用的是SVN版的, 大家可以下载1.0.7的.将Yii框架放到D:\yii下,在D盘根目录下执行
yii\framework\yiic.bat webapp shiehnews-yii
建立项目, 然后进入项目, 修改protected\config\main.php, 修改里面name值,改成ShiehNews, 接着修改db值
将db值修改为:
'db' => array(
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=shiehnews',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
),

dbname改成数据库的名称,username和password改成自己数据库的用户名和密码.保存即可.
回到命令行, 进入shiehnews-yii目录, 执行
protected\yiic.bat shell
运行代码生成器, 使用model <ModelName>来建立4个model, 对应我们建的4张表, 这里给4个model启的名字分别为Article, Category, Comment, User, 建好后, 使用crud Article和crud User来建立脚手架. 完成后, 输入exit退出.

至此, 我们已经建立了需要的数据库, 也创建了项目目录, 同时也有了4个model和2个controller, 下一节开始, 我们一起来增加注册, 登录和注销的功能.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值