Yii框架:MVC框架
Model:模型
View:视图
Controller:控制器
Yii特点:
1、美籍华人开发
2、重量级框架
3、PDO
4、没有集成Smarty(显示与逻辑没有分离)
5、脚手架(自动生成项目目录)
Yii开发网站的步骤
1、找到Yii的核心资源包
2、新建项目
3、将framework文件夹复制到项目中
4、利用Yii的脚手架来自动生成项目目录
1)在framework/yiic,脚手架
2)打开命令提示符窗口(Linux打开终端)
3)切换到framework目录中
4)利用yiic自动生成项目目录
yiic webapp ../app
5)输入完上边命令后,点击回车,会出现对话框,点击确定既可
6)有些学生电脑不识别yiic命令
解决办法:将php5的路径配置到path环境变量
7)有些Win7的学生,无权执行此操作
解决办法:所有程序->附件->命令提示符(鼠标右键->以管理员身份运行)
项目目录
app------------------------应用程序
assets-------------------公用文件
css----------------------样式表
images-------------------图片
protected----------------代码文件
commands---------------自定义的shell命令
components-------------组件文件夹
Controller.php-------所有控制器父类
UserIdentity.php-----自定义组件的父类
config-----------------配置文件夹*********
main.php-------------全局配置文件
controllers------------控制器文件夹*******
data-------------------数据库脚本
extensions-------------扩展的应用程序
messages---------------翻译过的信息
migrations-------------移植数据库的脚本
models-----------------模型文件夹*********
runtime----------------运行时临时文件目录
views------------------视图文件夹*********
layouts--------------母版页文件夹
themes-------------------主题
index.php----------------入口文件
framework------------------yii资源包
yiic---------------------脚手架
yiilite.php--------------每个类对应的目录
控制器的命名规则
1、必须采用大驼峰的命名规则
2、必须以Controller来结尾
控制器中方法的命名规则
1、必须采用小驼峰的命名规则
2、必须以action来开头
actionIndex() actionLogin() actionDelete()
views如何存储模板文件
1、在views下新建一个控制器名的文件夹
2、控制名的文件夹下新建视图文件
views
控制器
xxx.php
xxx.php
xxx.php
控制器
xxx.php
错误单词
Error:硬件错误、无法恢复的错误
Exception:运行时错误(逻辑错误)
Bug:错误
设置默认的控制器、方法
1、找到config/main.php全局配置文件
2、在main.php中的第一行添加如下代码
"defaultController"=>"控制器/方法名",
定义全局使用的常量
1、找到index.php入口文件
2、在入口文件中定义常量
Yii的路由:
1、访问入口文件(访问的是默认的控制器、默认的方法)
http://localhost/项目/app/index.php
2、问号的方式
http://localhost/项目/app/index.php?r=控制器/方法
http://localhost/项目/app/index.php?r=控制器/方法/名/值/名/值
3、pathinfo的方式
http://localhost/项目/app/index.php/控制器/方法
http://localhost/项目/app/index.php/控制器/方法/名/值/名/值
urlManager(url管理):设定pathinfo模式的路径
1、找到config/main.php全局配置文件
2、去掉下边代码的注释
/*
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
*/
控制器的定义格式
class XxxController extends Controller
{
public function actionXxx()
{
逻辑代码;
//转发到指定的模板文件
$this->renderPartial("xxx");
$data = array(
"名"=>值,
"名"=>值,
"名"=>值
);
$this->renderPartial("xxx",$data);
}
}
从控制器转发到指定的视图页面
1、转发到视图页面,不调用母版页
$this->renderPartial("index");
$this->renderPartial("index",数组);
2、转发到视图页面,调用母版页
$this->render("index");
$this->render("index",数组);
母版页:编写头和脚
1、在views/layouts下新建一个xxx.php
2、建议母版页的名字就是项目名(不是必须)
3、找到componenets/Controller.php
修改如下代码
public $layout='//layouts/column1';
将column1改为母版页的名字(注意:不要扩展名)
模型的命名规则
1、必须采用大驼峰的命名规则
2、必须以表名来命名
模型的父类
CFormModel:select、update、delete
CActiveRecord:select、update、delete、insert
父类
class CActiveRecord
{
//参数:模型的类名
public static function model($className)
{
include 'protected/models/'.$className.'.php';
$model = new $className();
return $model;
}
}
class BbsInfo extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
}
控制器
//获得一个模型对象
$bbsInfo = BbsInfo::model();
网站sina
create database sina;
use sina;
1、论坛
bbs_userInfo
bbs_bbsInfo
bbs_reviews
2、邮箱
mail_userInfo
mail_mailInfo
模型的定义格式
class 模型名 extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return "表名";//完整的表名
return "{{表名}}";//省略了表的前缀的表名
}
}
设置数据库的配置信息
1、找config/main.php全局配置文件
2、找到如下代码
/*
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=库名',
'emulatePrepare' => true,
'username' => 'root',
'password' => '密码',
'charset' => 'utf8',
'tablePrefix'=>'bbs_',//表的前缀
),
*/
3、修改数据库的配置信息
数据库操作
1、查询多条记录,返回值:二维数组
$model = 模型::model()或$model = new 模型();
$result = $model->findAll();
$result = $model->findAll(条件);
$result = $model->findAll(array(
"select"=>"字段,字段...",
"condition"=>"条件",
"order"=>"排序的字段",
"limit"=>"每页显示几条记录",
"offset"=>"每页记录的起始值"
));
$result = $model->findAllBySql("select语句");
2、查询一条记录,返回值:一维数组
$model = 模型::model()或$model = new 模型();
$result = $model->find();
$result = $model->find(条件);
$result = $model->findByPk(主键值);
$result = $model->findBySql("select语句");
3、修改记录,返回值:受影响的行数
$model = 模型::model()或$model = new 模型();
$result = $model->updateAll(关联数组,条件);
$result = $model->updateByPk(主键值,关联数组);
4、删除记录,返回值:受影响的行数
$model = 模型::model()或$model = new 模型();
$result = $model->deleteAll(条件);
$result = $model->deleteByPk(主键值);
5、添加记录,返回值:布尔值
$model = new 模型();
$model->字段 = 值;
$model->字段 = 值;
$model->字段 = 值;
$model->字段 = 值;
$result = $model->save();
6、执行sql语句,获得多条记录,返回值:二维数组
$db = Yii::app()->db;
$st = $db->createCommand("select语句");
$result = $st->queryAll();
7、执行sql语句,获得一条记录,返回值:一维数组
$db = Yii::app()->db;
$st = $db->createCommand("select语句");
$result = $st->queryRow();
8、执行insert、update、delete语句,返回值:受影响的行数
$db = Yii::app()->db;
$st = $db->createCommand("insert|update|delete语句");
$result = $st->execute();
9、执行count函数,返回值:一个整数
$model = 模型::model()或$model = new 模型();
$result = $model->count();
$result = $model->count(条件);
$result = $model->countBySql("select count(*) from 表 where 条件");
$result = $model->countBySql("select sum(字段) from 表 where 条件");
Yii框架实现数据库分页的办法
1、执行sql语句
2、$model->findAllBySql("select语句");
3、$model->findAll(array("limit"=>"","offset"=>""));
跳转页面
1、从控制器跳转到指定的视图页面,走母版页
$this->render("xxx");
$this->render("xxx",关联数组);
2、从控制器跳转到指定的视图页面,不走母版页
$this->renderParital("xxx");
$this->renderParital("xxx",关联数组);
3、从控制器跳转到其他的控制器(重定向)
$this->redirect("其他控制器的url地址");
Yii框架对get参数特殊处理
class XxxController extends Controller
{
public function actionXxx($参数名,$参数名...)
{
$变量 = $_GET["参数名"];//正确
}
}
注意:
1、方法中的参数名必须与get中的参数名相同
2、方法中一旦添加了参数,那么这个get参数必须存在
如果get中不存在该参数,报错
错误处理页面(只能处理404错误[访问的页面不存在])
1、修改main.php全局配置文件(设置错误页面)
2、在控制器的方法中获得错误信息
$error = Yii::app()->errorHandler->error;
code:错误编号
type:错误类型
file:报错文件
message:错误信息
路径别名
system:路径(framework)
application:路径(app/protected)
zii:路径(framework/zii)
面包屑(当前位置)
1、在母版页中的指定位置添加如下代码
<?php
$this->widget("zii.widgets.CBreadcrumbs",array(
"homeLink"=>"<a href='地址'>网站首页</a>",
"links"=>$this->breadcrumbs,
"separator"=>" » "
));
?>
2、在控制器的方法中添加如下代码
$this->breadcrumbs = array(
"文本信息"=>"链接地址",
"文本信息"=>"链接地址",
"文本信息"=>"链接地址",
"文本信息"
);
网站的架构模式
C/S:客户端服务器模式
B/S:服务器模式
Yii框架中自带的表单挂件(表单封装类)
framework/web/widgets/CActiveForm.php
在视图页面添加如下代码来制做表单
<?php
//开始一个表单,相当于<form method="" action="" name="" enctype="">
//$form是CActiveForm类的对象
$form = $this->beginWidget("CActiveForm",array(
"action"=>APP."/Login/login",//提交地址
"method"=>"post",//提交方式
"htmlOptions"=>array(
"name"=>"frm",//表单名
"enctype"=>"multipart/form-data",//设置表单编码方式
),
"enableClientValidation"=>true,//是否支持客户端的表单验证
"clientOptions"=>array(
"validateOnSubmit"=>true,//当表单提交时,启动验证
)
));
?>
<?php echo $form->textField()?>
<?php echo $form->hiddenField()?>
<?php echo $form->passwordField()?>
<?php echo $form->textArea()?>
<?php echo $form->radioButton()?>
<?php echo $form->checkBox()?>
<?php echo $form->dropDownList()?>
<?php echo $form->fileField()?>
<?php
$this->endWidget();
?>
yii的表单验证
1、视图的表单必须用Yii的表单
2、Yii的表单必须添加如下两个参数
"enableClientValidation"=>true,//是否支持客户端的表单验证
"clientOptions"=>array(
"validateOnSubmit"=>true,//当表单提交时,启动验证
)
3、在指定的模型中添加rules方法
public function rules()
{
return array(
array("表单元素名","验证规则","message"=>"提示信息"),
array("表单元素名","验证规则","message"=>"提示信息"),
array("表单元素名","验证规则","message"=>"提示信息"),
);
}
4、在视图页面显示指定的提示错误信息
<?php echo $form->error(模型对象,"表单元素名")?>
验证码
1、Yii提供的验证码
framework/web/widgets/captcha/CCaptchaAction.php
(1)回到控制器中,添加如下方法(引用其他类)
public function actions()
{
return array(
"引用类的别名"=>array(
"class"=>"引用类的路径"
),
"引用类的别名"=>array(
"class"=>"引用类的路径"
),
"引用类的别名"=>array(
"class"=>"引用类的路径"
),
);
}
(2)视图页面如何调用
引用的路径:<?php echo APP?>/控制器/引用类的别名
在main.php全局配置文件中设置缓存
'components'=>array(
"cache"=>array(
class=>"system.caching.CFileCache"
),
......
)
后台管理的制做(模块):gii功能(自动生成新的模块)
1、修改main.php全局配置文件,开启gii功能
(1)去掉gii模块的注释
(2)添写一个密码(密码随意)
2、访问gii的地址
http://localhost/项目/app/index.php?r=gii
http://localhost/项目/app/index.php/gii
3、自动生成新的模块
Controller Generator 自动生成控制器
Crud Generator 自动生成CURD操作
Form Generator 自动生成表单
Model Generator 自动生成模型
Module Generator 自动生成模块
(1)点击“Module Generator”
(2)输入Module ID:“admin”
(3)点击“Preview”按扭,进行预览
(4)点击“Generate”生成新的模块
4、重新配置main.php配置文件
modules => array(
"admin",//己经创建的新的模块admin模块
"webo",//webo模块
"gii"=>array(
....
)
)
5、新的模块访问的地址
http://localhost/项目/app/index.php?r=模块/控制器/方法/名/值
http://localhost/项目/app/index.php/模块/控制器/方法/名/值
http://localhost/bbs/app/index.php/admin/default/index
6、新模块的目录结构
modules
admin
components--------组件文件夹
controllers-------控制器文件夹
messages----------翻译过的信息
models------------模型文件夹
views-------------视图文件夹
layouts---------母版文件夹
AdminModule.php---当前模块的入口文件
7、设置后台的默认控制器和方法
到后台的入口文件中找到init方法,在该方法的最后添加一句代码
$this->defaultController = "控制器/方法";
8、设置后台的母版页
到后台的入口文件中找到beforeControllerAction方法,
在该方法中的第一句添加一句代码
$controller->layout = "/layouts/母版文件名";
特殊说明,本文版权归 ning个人博客 所有带原创标签请勿转载,转载请注明出处.
本文标题: 今天用到了Yii框架,总结一下Yii入门知识,十分钟入门Yii
本文网址: http://www.ningguoteng.com/show-50.html
点击下载Yii框架: http://pan.baidu.com/s/1hq7tHqs