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
yii2 basic版 MVC 部分的更多相关文章
- yii2 basic版基础部分
Yii2.0 basic 版 yii 官方网站:http://www.yiiframework.com/ 一.安装: 1.下载地址:http://www.yiichina.com/download 从 ...
- yii2 advanced版基础部分
yii2 advanced版 一.目录结构 1.backend 和 frontend : 前后台入口,相当于是一个单独的Basic应用,有自己的 mvc 目录.配置文件目录.入口文件目录 2.cons ...
- yii2高级版账号密码问题
yii2高级版默认后台没有密码,生成账号密码步骤: 1. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...
- Ubuntu 安装yii2 advanced版 遇到的坑
1.安装 Composer https://www.yiichina.com/doc/guide/2.0/start-installation通过 Composer 安装 curl -sS https ...
- yii2 beta版 执行流程
yii2 beta版 执行流程 自动加载 1.composer的自动加载 //composer的加载实现了四种方式,可以看看 require(__DIR__ . '/../../vendor/auto ...
- Yii2 baisic版gii的使用和分页
一.Gii 的使用 1.配置 gii 的位置: 在 config/web.php 里面: if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii'; $con ...
- yii2 basic 简洁安装教程
虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载b ...
- yii2 basic VER
assets/ contains assets definition 包含资源定义 commands/ contains console commands (controllers) 包含命令行命令, ...
- php--->自己封装的简易版mvc框架
最近根据自己的理解,封装了一个自己的框架,来重新系统化梳理自己对mvc框架的理解:后续会陆续添加各种新的功能. 欢迎指点交流. GitHub:https://github.com/Frankltf/m ...
随机推荐
- SQL Server控制执行计划
为了提高性能,可以使用提示(hints)特性,包含以下三类: 查询提示:(query hints)告知优化器在整个查询过程中都应用某个提示 关联提示:(join hints)告知优化器在查询的特定部分 ...
- python---用链表结构实现有序和无序列表的几个功能
只是看看套路,没有深入练习. 如果真要自己写,可以基于此类. 但其实,在普通使用中,这样实现的性能,并没有python原生的列表性能好. 因为python原生列表的功能,是基于数组作扩展实现的. # ...
- DBEntityEntry类
DBEntityEntry是一个重要的类,可用于检索有关实体的各种信息.您可以使用DBContext的Entry方法获取特定实体的DBEntityEntry实例. DBEntityEntry允许您访问 ...
- Windows无法自动将IP协议堆栈绑定到网络适配器 的解决办法
实验室的台式机在升级驱动后上不了网了,有线网卡驱动卸载后重装了,还是不行,通过Windows诊断发现“Windows 无法自动将 IP 协议堆栈绑定到网络适配器的解决办法”. 解决办法: 打开“控制面 ...
- python_异常处理_断言
一.Python标准异常 常用异常 Exception 常规错误的基类 AttributeError 试图访问一个对象没有的属性 IOError 输入/ 输出异常,基本上是无法打开文件 ImportE ...
- Bean Shell常用内置变量总结
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...
- Jnekins+Gitlab代码提交全程配置
实验环境: 测试机:192.168.2.156 Jenkins:192.168.2.157 Gitlab:192.168.2.158 温馨提示:如果不知道,Jenkins和Gitlab安装过程~可参考 ...
- MyEclipse 安装插件 Github安装/使用 教程
2016年02月18日 09:45:23 阅读数:4531 本文的目的是 1.在 Myeclipse10.7中 集成Github并使用. 选择的安装方式是:MyEclipse 中设置下文中1后,下载g ...
- python--smtp邮件使用
#构建对象时,第一个是邮件正文,第二个发送类型,plain表示纯文本,最后使用utf-8保证多语言兼容 #如果需要发送html的话,就把plain改为html------>内容使用html构造便 ...
- POJ2676 Sudoku 舞蹈链 DLX
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目(传送门) 题意概括 给出一个残缺的数独,求解.SPJ 题解 DLX + 矩阵构建 (两个传送门) 代码 #includ ...