yii2 basic版 MVC 部分
一、model
1、什么是模型
- 模型是 MVC 模式中的一部分,是表现业务数据、规则和逻辑的对象
- 可通过继承 yii\base\Model 或它的子类(activeRecord)来定义模型类,基类 yii\base\Model 支持许多实用的特性
- Model 类也是更多高级模型例如 Active Record 活动记录的基类。
2、yii\base\Model 支持以下实用特性:
属性 : 表现业务数据,可以像普通类属性或数组一样被访问 (e.g. public $name)
属性标签 :指定属性显示出来的标签 (例如: models\ContactForm 类,function attributeLabels(){} 方法里面定义的就是属性标签)
public function attributeLabels() {return ['verifyCode' => 'Verification Code', // 所有的verifyCode 属性在页面中都显示为 Verification Code'name' => '姓名', // 所有的 name 属性在也面中都显示为 "姓名" 两个字]; }
3、块儿赋值 :支持一步给许多属性赋值;
$model->load(Yii::$app->request->post()) # 使用load()方法进行块儿赋值,$app->request->post()获取所有由前台提交过来的数据
4、验证规则 :确保数据数据符合所申明的验证规则(例如在 models\ContactForm 类,function rules(){} 方法里面定义)
public function rules() {return [[['name', 'email', 'subject', 'body'], 'required'], // name, email, subject 和 body are 都是必填字段['name','integer'], // name 必须是整数['name','compare','compareValue'=>30,'operator'=>'>='], // name >=30['email', 'email'], // email 必须是一个合法的邮箱地址['verifyCode', 'captcha'], // 验证码必须填写正确]; }
验证时采用 yii\base\Model::validate() 方法触发数据验证,如果有数据验证失败,将自动把 yii\base\Model::hasErrors() 属性置为 true,
可以使用 yii\base\Model::getErrors() 来查看错误详情。e.g:
<?php $model = new EntryForm(); $model -> name = 'Carroll'; $model -> email = 'wrong'; if($model -> validate()){// 验证成功 }else{// 验证失败// 使用 $error = $model -> getErrors(); var_dump($errors); 获取错误详情。 }
- yii\base\Model 用于普通模型类的父类并与数据表无关
- yii\base\activeRecord 用于普通模型类的父类并与数据表有关
- yii\base\activeRecord 也是继承 yii\base\Model ,但是增加了数据库处理
5、表与表之间的关联(多对一或者一对一,例如文章对应文章状态,使用 hasOne() )
/** * 建立文章类和文章状态类之间的联系,建立起这种联系后,相当于原来的 Post 类就多了一个属性 status0,这个属性值是文章状态类的对象 * 获取状态名可以使用:$thePost->status0->name 来获取 */ public function getStatus0() {return $this->hasOne(Poststatus::className(), ['id' => 'status']); // Poststatus::className 是文章状态表的表名,['id' => 'status']是关联的条件 }
(一对多,例如文章对应文章评论,使用 hasMany() )
/*** Post 类多了一个 commets 属性,这个属性是一个数组,数组是由评论对象组成的* 获取评论使用:$Post -> comments 来获取,但它是一个对象数组,如果要访问具体的某个对象,就需要用 foreach 来遍历*/public function getComments(){return $this->hasMany(Comment::className(), ['post_id' => 'id']);}
二、view
1、布局文件
- 布局是一种特殊的视图,代表多个视图的公共部分,默认使用 views/layouts/main.php
2、如何创建布局
- 布局也是视图,它可以像普通视图一样创建
- 布局默认存储在 @app\view\layouts 下面
3、如何变幻布局
- 默认会使用 @app\view\layouts\main.php布局文件
- 更换整个类中的布局 : public $layout = 'dcr';
- 更换某一个页面的布局 : 在方法中添加 $this -> layout = 'dcr';
- 如果一个页面不需要任何布局,只需要在方法中设置 $this->layout=false;
4、布局文件的数据
- 两个预定义变量 $this 和 $content
- 和视图中的 $this 一样,$this 指向 yii\web\View 的实例
- $content 就是控制器渲染出来的结果,每一页的结果都不同。
5、布局文件的结构
<?php $this->beginPage() ?> // 在布局的开始处调用 $this 指向 yii\web\view 来管理和渲染这个视图文件,用来标识一个html文件的开始 <html><head><?php $this->header() ?> // 在 head 标签处调用,标识html文件头部的位置</head><body><?php $this->beginBody() ?> // 在 body 的开始处调用,标识 html 文件 body 部分的起始位置<?php $this->endBody() ?> // 在 body 的起始处调用,标识 html 文件 body 部分的结束位置</body> </html> <?php $this->endPage() ?> // 在布局的结尾处调用,用来标识一个html文件的结束
6、使用 <?=Html::encode($variable) ?> 可以防止被恶意JavaScript xss(跨站脚本)攻击,就是使用htmlspecialchars()将预定义字符转换为 html 实体
htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE,'UTF-8', true);
- ENT_QUOTES - 编码双引号和单引号
- ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。
7、render 在 view 中的应用:
<?= $this->render('_form', [ 'model' => $model, ]) ?>
- _form 是同目录下的一个文件,专门用来展示表单
- model 是从数据库查询的对象数组
三、controller
1、控制器
- MVC 结构中的 c 部分
- 从 yii\base\Controller 继承而来
- 具体来说,是从模型对象中拿到需要的数据,然后调用视图模板文件来渲染这些数据,然后生成输出响应信息
2、组成
- 控制器主要有动作组成
- 动作是控制器类中的方法
- 一个动作对应一个页面
3、render()
查看方法:从类参考手册中的yii\web\controller\所有方法中查看render()方法
public string render($view,$params=[])
- $view 指视图名
- $params 是传给视图的数据
- 返回的是字符串,就是渲染好的结果
- 还有视图或文件不存的时候抛出的异常
4、控制器中的方法
- Yii 使用 action 前缀区分普通方法和操作。action 后面的操作被映射为操作的 ID
- 若方法名有多个单词组成,那么 视图名由连字符连接,例如:
public function actionSayHello($message='Hello') {return $this->render('say-hello',['message'=>$message]); }
5、yii\web\Request::post() 方法负责收集用户提交的数据
public function actionEntry(){$model = new EntryForm;if($model->load(Yii::$app->request->post())&&$model->validate()){return $this->render('entry-confirm',['model'=>$model]);}else{return $this->render('entry',['model'=>$model]);} }
- Yii::$app 代表应用实例,是一个可全局访问的单例,能提供 request、response、db 等特定功能的组件
注:本文为作者(44106-kangaroo) 看完魏羲教你学Yii2.0 视频后所记,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/8004737.html
转载于:https://www.cnblogs.com/chrdai/p/8004737.html
yii2 basic版 MVC 部分相关推荐
- yii2 beta版 执行流程
yii2 beta版 执行流程 自动加载 1.composer的自动加载 //composer的加载实现了四种方式,可以看看require(__DIR__ . '/../../vendor/autol ...
- Openairinterface从零开始搭建5G核心网——Basic版
1.安装虚拟机 虚拟机VMware :16.2.0 build-18760230 百度网盘链接: https://pan.baidu.com/s/1TfDdb4gczyURrrqAhqKO0Q?pwd ...
- 关闭windows 7 home basic版 internet 连接状态测试
一.正版的windows 7 home basic系统升级到旗舰版,在控制面板中找到windows any time(图标改为小图标好找),选择第二个选项,密钥是6K2KY-BFH24-PJW6W-9 ...
- Yii2高级版框架api接口
一.添加api接口应用 1.复制粘贴一份backend/frontend应用,改名为api(可以自定义) 2.修改api文件的命名空间 3.修改config/main.php配置文件中的id => ...
- yii2.0 中文手册 php,Yii2.0 高级版开发指南
安装扩展 安装Yii最好的方式就是使用Composer安装,所以我们需要安装Composer,但是为了安装Composer,我们需要安装一下关于Composer和Yii2的许多扩展包,别担心下面的教程 ...
- Yii2的MVC新特性
这篇文章主要来看看在Yii2之中的MVC,当然,最核心的思想还是跟Yii1.1一样的,但是我今天是想来看看在Yii2里的MVC跟Yii1.1有什么不同,或者应该直接说,Yii2的改进在哪里,以至于使得 ...
- centos下使用composer安装yii2框架
一:安装composer curl -s http://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer ...
- Windows YII2安装
YII2 基础版 Window 安装步骤 1.Window中需要下载并运行Composer-Setup.exe 自行百度搜索composer下载安装 Composer 安装后,切换到一个可通过 Web ...
- Yii2 使用 faker 生成假数据(转)
测试过程中有时候需要生成大量的假数据,faker 是一个生成假数据的类库,可以生成姓名,电话,IP地址,密码,ISBN等等你能想到的或者你想不到的各种类型的假数据. Yii2.0已经集成该类库,不用再 ...
最新文章
- 新都一职高计算机学什么,新都第一职业高中怎么样
- 使用Ant将windows下开发的Struts2应用直接部署到Linux上
- Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/
- ZooKeeper JMX
- U盘加密软件测试简历,U盘加密软件哪个好用?2020U盘加密软件推荐
- 怎么用硕鼠下载优酷专辑
- CVE-2020-10148: SolarWinds 远程代码执行漏洞通告
- AVC1与AVC与H264
- java代码读取txt文件_java读取txt文件代码片段
- 轻量纯css框架,网页设计的12个轻量CSS框架
- 微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制
- pptpd mysql_安装pptpd脚本
- 表示学习(Representation Learning)
- 如何连接苹果电脑打印服务器
- DeepHPV:一个用于预测HPV整合人类基因位点的深度学习模型
- STM32CubeMX入门使用一
- 执行sql报错,错误代码是 1064 ,其实是这个问题。
- 揭开电脑上登录多个微信的秘密
- leetcode算法算题记录-数组--快慢指针
- 四阶段法-出行分布计算 底特律法
热门文章
- XCTF-Reverse:re1
- BUUCTF-WEB:[HCTF 2018]WarmUp
- Session与Cookie的安全问题
- idea debug只断点当前线程,不阻塞其他线程
- 从思维导图学习操作系统(二)
- Java小结(二)——打印矩形和九九乘法表
- oracle用户手册在哪里,Oracle用户管理常用操作参考手册
- CoinU基本概念分享(什么是去中心化钱包、助记词丢失怎么办等)
- CVE-2016-10229分析
- Google Apps – Framework, Phonesky, GmsCore w/ AOSP Build.