一、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 部分的更多相关文章

  1. yii2 basic版基础部分

    Yii2.0 basic 版 yii 官方网站:http://www.yiiframework.com/ 一.安装: 1.下载地址:http://www.yiichina.com/download 从 ...

  2. yii2 advanced版基础部分

    yii2 advanced版 一.目录结构 1.backend 和 frontend : 前后台入口,相当于是一个单独的Basic应用,有自己的 mvc 目录.配置文件目录.入口文件目录 2.cons ...

  3. yii2高级版账号密码问题

    yii2高级版默认后台没有密码,生成账号密码步骤: 1. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...

  4. Ubuntu 安装yii2 advanced版 遇到的坑

    1.安装 Composer https://www.yiichina.com/doc/guide/2.0/start-installation通过 Composer 安装 curl -sS https ...

  5. yii2 beta版 执行流程

    yii2 beta版 执行流程 自动加载 1.composer的自动加载 //composer的加载实现了四种方式,可以看看 require(__DIR__ . '/../../vendor/auto ...

  6. Yii2 baisic版gii的使用和分页

    一.Gii 的使用 1.配置 gii 的位置: 在 config/web.php 里面: if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii'; $con ...

  7. yii2 basic 简洁安装教程

    虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载b ...

  8. yii2 basic VER

    assets/ contains assets definition 包含资源定义 commands/ contains console commands (controllers) 包含命令行命令, ...

  9. php--->自己封装的简易版mvc框架

    最近根据自己的理解,封装了一个自己的框架,来重新系统化梳理自己对mvc框架的理解:后续会陆续添加各种新的功能. 欢迎指点交流. GitHub:https://github.com/Frankltf/m ...

随机推荐

  1. js数字货币格式互转

    //将1,234,567.00转换为1234567.00 function moneyToNumValue(val) { var num = val.trim(); var ss = num.toSt ...

  2. Ncurses - Panel

    当你需要创建许多窗口时,你很快就会发现它们会变得难以管理.Panel library提供了很好的解决方案. Panel 实际上是一个窗口,通过容器 - 栈 来管理,栈顶的 panel 是完全可见的,其 ...

  3. Derive representation formula from Green’s identity

    This article introduces how to derive the representation formula used in BEM from Green's identity. ...

  4. docker运行php网站程序

    有一个之前的php网站程序需要迁移到K8S,简单调研了下. 基础镜像 官方提供了诸如php:7.1-apache的基础镜像,但是确认必要的扩展,例如gd,当然官方提供了docker-php-ext-i ...

  5. appstore跳转

    二维码跳转 https://itunes.apple.com/cn/app/id123123123 应用内跳转 this.alertCtrl.create({ title: '更新', message ...

  6. Consumer is not subscribed to any topics or assigned any partitions

    版本: scala:2.11.8 spark:2.11 hbase:1.2.0-cdh5.14.0 报错信息: java.lang.IllegalStateException: Consumer is ...

  7. HBase API操作

    |的ascII最大ctrl+shift+t查找类  ctrl+p显示提示 HBase API操作 依赖的jar包 <dependencies> <dependency> < ...

  8. 004 使用SpringMVC开发restful API二--编写用户详情

    一:编写用户详情服务 1.任务 @PathVariable隐射url片段到java方法的参数 在url声明中使用正则表达式 @JsonView控制json输出内容 二:@PathVariable 1. ...

  9. CSS选择器 + Xpath + 正则表达式整理(有空再整理)

    选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstna ...

  10. Hdu-2016解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016 题目解析:输入n个数据,找出n个数据中最小的数据,将它与第一个数据进行交换.(这里可得看清题意, ...