各个Yii2.0框架下载链接:https://github.com/yiisoft/yii2/releases
一.应用结构
1.模型
模型是MVC模式中一部分,是代表业务数据,规则和逻辑的对象。
属性代表业务数据,每个属性是模型的公有可访问属性。
echo $model->getAttributeLabel('name');
当属性显示或获取输入时,经常显示属性相关标签。应用支持多语言的情况下,可翻译属性标签。
注:属性标签是 视图一部分, 但是在模型中声明标签通常非常方便,并可形成非常简洁可重用代码。
二.常用组件
1.美化路由(urlManager)
去掉index.php 配置component组件
参考文章:https://blog.youkuaiyun.com/lmjy102/article/details/53857520
2.语言包的配置
参考文章:http://www.yii-china.com/post/detail/177.html
3.上传图片组件: http://www.yii-china.com/post/detail/15.html
4.富文本编辑器组件 : http://www.yii-china.com/post/detail/03.html
三.数据库操作
var_dump($data); exit(0); 测试函数
创建一个yii\db\Command的对象,调用对象的方法来执行SQL查询,返回值是字符型的数组
$posts=Yii::$app->db->createCommand('SELECT * FROM post')->queryAll();
SQL语句还可以绑定参数
$posts=Yii::$app->db->createCommand('SELECT * FROM post
where id=:id AND status=:status')
->bindValue(':id',$_GET['id']);
->bindValue(':status',2);
->queryOne();
1.Yii\db\command的优缺点
1>.简单,只需要处理SQL语句和数组即可
2>.高效,通过SQL语句来查询数据库非常高效
1>.不同数据库系统的SQL语句会有些差别,因此无法做到代码适用于多种数据库系统
2>.用数据,没有用到面向对象的方式来管理数据,代码难维护
3>.如果不小心,会留下SQL注入这种不安全的因素
1.ActiveRecord
ActiveRecord(活动记录,简称AR类)提供了一套面向对象的接口,用以访问数据库中的数据。
1》一个AR类关联一张数据表,每个AR对象对应表中的一行
2》AR对象的属性,对应为数据库中的列
3》可以直接以面向对象的方式来操纵数据表中的数据,这样就不需要写SQL语句就能实现数据库的访问。
2.声明ActiveRecord类
通过继承yii\db\ActiveRecord基类来声明一个AR类,并实现tableName方法,返回与之相关联的数据表的名称。
Class Post extends \yii\db\ActiveRecord{
Public static function tableName(){
Return ‘post’;
}
}
3.查询数据
AR提供了两种方法来构建DB查询,返回AR对象,
*Yii\db\ActiveRecord::find()静态方法
$model=Post::find()->where(['id'=>32])->one();
等价于Post::findOne(32);
$models=Post::find()->where(['statue'=>32])->all();
等价于Post::findAll([‘statue’=>32]);
$models=Post::find()->where(['AND'[‘status’=>1],[‘author_id’=>1],[‘Like’,’title’,’yii2’]])->all();
*Yii\db\ActiveRecord::findBySql()
$sql=’SELECT * FORM post where status=1’;
$posts=Post::findBySql($sql)->all();
ActiveQueryInterface常用方法
All() one()执行查询,并返回AR对象
Where() orWhere() andWhere() 查询条件
|
| Where参数写法 | SQL语法 |
| and | [‘and’,’id=1’,’id=2’] | id=1 AND id=2 |
| or | [‘or’,’id=1’,’id=2’] | id=1 OR id=2 |
| in | [‘in’,’id=1’,[1,2,3]] | IN(1,2,3) |
| between | [‘between’,’id’,’1,10] | Id BETWEEN 1 AND 10 |
| Like | [‘like’,’name’,[‘’test,’sample’]] | name LIKE ‘%test%’ AND Name LIKE ‘%sample%’ |
| 比较 | [‘>=,’id’,10] | id>=10 |
orderBy() addOrderBy() 排序
Count() 返回符合查询条件的记录数
Limit() 取出查询结果的条数
With() 指定关联表的字段
4.访问列数据
AR对象的属性,对应为数据行的列
$model=Post::findOne(1);
echo $model->id;
$model=Post::findAll([‘status’=>1]);
foreach($models as $item){
echo $item->id;
}
5.操作数据CRUD
AR提供下面的这些方法来实现插入,更新和删除等功能:
| Create |
| $customer=new Customer(); $customer->name=’James’; $customer->save();//等同于$customer->insert() Yii\db\ActiveRecord::insert() |
| Read |
| $customer=Customer::findOne($id) |
| Update |
| $customer=Customer::findOne($id); $customer->name=’jame’; $customer->save(); //等同于$customer->update() Yii\db\ActiveRecord::update() |
| Delete |
| $customer=Customer::findOne($id); $customer->deletle(); |
| Yii\db\ActiveRecord::save()自己可以判断是更新还是删除 |
6.查询关联的数据
ActiveRecord类通过hasOne或hasMany方法来建立两个表的关联关系
hasOne用于多对一,一对一的情况,hasMany用于一对多的情况
建立关联关系后,就可以像访问自己的列数据一样便捷地去访问关联表的数据
| Common/models/Post.php |
| Public function getStatus0(){ return $this->hasOne(Poststatus::className(),[‘id’=>’status’]); } |
| Public function getComments(){ Return $this->hasMany(Comment::className(),[‘post_id’=>’id’]); } |
| $thePost->status0->name; $thePost->comments; |
《
表单它能把模型和表单结合到一起,简化了表单input元素的html代码编写,还充分利用了模型的数据规则,极大的减轻了表单开发的工作量,同时让表单代码的可读性和可维护性大大提高。
---ActiveField对象的使用
<?=$form->field($model,’password’)->password()?>
<?=$form->field($model,’username’)->textInput()->
hint(“Please enter your name”)->label(‘Name’)?>
<?=$form->field($model,’email’)->input(‘email’)?>
---额外的标签的处理
表单中,存在一些和模型对象没有关系的、额外的HTML标签,比如submitButton我们可以:
---使用纯HTML
使用yii\helpers\Html帮助类中的方法来添加到表单中
》
四.小部件DetailView
1.数据小部件
Yii提供了一套数据小部widgets,这些小部件可以用于显示数据。
*DetailView小部件用于显示一条记录数据
*ListView和GridView小部件能够用于显示一个拥有分页,排序和过滤功能的一个列表或者表格
2.DetailView
用来显示一条记录的详情。下面这些都是一条记录的情况:
*一个Model模型类对象的数据
*ActiveRecord类的一个实例对象
*由键值对构成的一个关联数组
3.DetailView的创建
*调用DetailView::widget方法
*model这里可以是一个模型类的实例,可以是一个数组
*attributes属性决定显示模型的哪些属性以及如何格式化
4.DetailView的自定义设置
*经常用attribute和value来分开展示属性的标签和属性的值
*可以指定数据的展示格式
* [
'class' => 'yii\grid\ActionColumn',
'buttons' => [
'view' => function($url, $model, $key) {
return Html::a('查看', $url);
},
'update' => function($url, $model, $key) {
return Html::a('编辑', $url);
},
'delete' => function($url, $model, $key) {
$options = [
'data-pjax' => 0,
'data-confirm' => '您确定要删除此项吗?',
'data-method' => 'post',
];
return Html::a('删除', $url, $options);
}
],
],
*template和option
| DetailView::widget([ ‘model’=>$model; ‘attribute’=>[ ‘id’, ‘title’, ‘content:ntext’, ‘tags:ntext’, //’status’, [ ‘label’=>’状态’, ‘value’=>$model->status0->name, ], ‘create_time:datetime’, ‘update_time:datetime’, //’author_id’ [ ‘attribute’=>’author_id’, ‘value’=>$model->author->nickname; ], ], ‘template’=>'<tr><th style="width:120px;">{label}</th><td>{value}</td></tr>' //数据适应行 ]) |
五、下拉菜单dropDownList()
<option value=”1”>草稿</option> 1为键,草稿为值
硬编码 <?=$form->field($model,’status’)->dropDownList([1=>’草稿’,2=>’已发布’],
[‘prompt’=>’请选择状态’]);?>
数据库获取第一种方法:<?php$psObjs=Poststatus::find()->all();
$allStatus=ArrayHelper::map($psObjs,’id’,’name’);?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’]);?>
数据库获取第二种方法:
<?php$psObjs=Yii::$app->db->createCommand(‘sql’);
$allStatus=ArrayHelper::map($psObjs,’id’,’name’);?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’])?>
六、数组助手类Array Helper
---什么是数组助手类
Yii数组助手类提供了额外的静态方法,让你更高效地处理数组。
---获取值(getValue)
Class User{ public $name=’Alex’;}
$array=[ ‘foo’=>[ ‘bar’=>new User(), ] ]
《PHP》 $value=isset($array[‘foo’][‘bar’]->name)?$array[‘foo’][‘bar’]->name:null;
《Array Helper》 $value=ArrayHelper::getValue($array,’foo.bar.name’);
---获取列(getColumn)
从多维数组或对象数组中获取某列的值。
$data=[ [‘id’=>’123’,’data’=>’abc’],[‘id’=>’345’,’data’=>’def’] ,];
Array Helper $ids=ArrayHelper::getColumn($data,’id’); 结果:[‘123’,’345’]
---建立映射表(map)
可以使用map方法从一个多维数组或一个对象数组中取出数据,建立一个映射表(键值对数组),在map方法的参数列表中指定了欲构建的映射表的键名和值。
$array=[
[‘id’=>’123’, ’name’=>’aaa’, ’class’=>’x’],
[‘id’=>’124’, ’name’=>’bbb’, ’class’=>’x’],
[‘id’=>’315’, ’name’=>’ccc’, ’class’=>’y’],
]
Array Helper $result=ArrayHelper::map($array,’id’,’name’);
结果:[ ‘123’=>’aaa’,‘124’=>’bbb’,‘315’=>’ccc’,]

七、Html帮助类
---解决什么问题
通过字符串连接来生成动态的HTML会很容易变得凌乱。
<?=’<p class=”username”>’.$user->name.’</p>’;?>
---什么是Html帮助类
HTML帮助类提供了很多静态方法,这些方法可以根据参数不同,生成各种HTML标签的代码,包括这些标签的属性和内容。
<?=’<p class=”username”>’.$user->name.’</p>’;?>
<?=Html::tag(‘p’,Html::encode($user->name),[‘class’=>’username’])?>
<?=<button type=”submit” class=”btn btn-primary” name”contact-button”>Submit</button>’?>
<?=Html::submitButton(‘Submit’,[class=”btn btn-primary” name”contact-button”])?>
---参考权威指南
权威指南列出许多种HTML帮助类的静态方法,可以用来生成各种HTML代码。
八、查询构建器QueryBuilder
1、什么是查询构建器
查询构建器也是建立在DAO基础之上,可让你创建程序化的、DBMS无关的SQL语句,并且,这样创建的SQL语句,比原生的SQL语句更容易读、更安全。
2、使用查询构建器的步骤
---构建查询。创建一个yii\db\Query对象来代表一条SELECT SQL语句,然后通过调用一套可以串起来的方法,比如select方法,from方法,where方法等这些方法,构建出可以满足一定要求的查询条件。
---执行查询。执行yii\db\Query的一个查询方法从数据建库当中检索数据,例如:all(),one(),column()等这些查询方法。
$rows=(new\yii\db\Query())->select([‘’id,’email’])->from(‘user’)->where([‘last_name’=>’Smith’])->orderBy(id)->limit(10){构建查询}
->indexBy(id)->all();{执行查询}





添加分组条件

表的连接查询


界面测试输出数据(格式化输出数据)
echo "<hr><pre>"; print_r( $psObjs);echo "</pre>";exit(0);


数据库获取第一种方法:
<?php $psObjs=Poststatus::find()->all();
$allStatus=ArrayHelper::map($psObjs,’id’,’name’);?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’]);?>
数据库获取第二种方法:
<?php $psObjs=Yii::$app->db->createCommand(‘sql’);
$allStatus=ArrayHelper::map($psObjs,’id’,’name’);?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’])?>
数据库获取第三种方法:
<?php $allStatus=(new \yii\db\Query())
->select([‘name’,’id’])
->from(‘poststatus’)
->indexBy(‘id’)
->column();?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’])?>
数据库获取第四种方法:
<?php $allStatus=Poststatus::find()
->select([‘name’,’id’])
->indexBy(‘id’)
->column();?>
<?=$form->field($model,’status’)->dropDownList($allStatus,[‘prompt’=>’请选择状态’])?>
本文是Yii 2.0的权威教程,涵盖应用结构、常用组件如美化路由和语言包配置,以及数据库操作,包括YiidbCommand的优缺点、ActiveRecord的使用和查询构建器的介绍。详细讲解了如何进行模型操作、数据CRUD、关联数据查询以及表单和小部件的使用,是学习Yii 2.0的全面参考资料。
521

被折叠的 条评论
为什么被折叠?



