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

时间: 2024-10-16 18:48:30

yii2 basic版 MVC 部分的相关文章

yii2 basic版基础部分

Yii2.0 basic 版 yii 官方网站:http://www.yiiframework.com/ 一.安装: 1.下载地址:http://www.yiichina.com/download 从归档文件安装:Yii2的基本应用程序模板 2.参数修改:basic/config/web.php 将 cookieValidationKey 任意填写一个值 3.访问主页:http://localhost/basic/web/index.php 二.目录结构 1.controllers/  :  控

Yii2 高级版新建一个 Api 应用

先在项目的根目录下复制一份 backend 为 api: cp backend/ api -r 拷贝 api 环境 cp -a environments/dev/frontend environments/dev/api cp -a environments/prod/frontend environments/prod/api 修改 environments/index.php 文件之后的代码(主要是添加了一些 api 相关的代码): return [ 'Development' => [ '

yii2 basic VER

assets/ contains assets definition 包含资源定义 commands/ contains console commands (controllers) 包含命令行命令,控制器 config/ contains application configurations 包含应用程序配置 controllers/ contains Web controller classes 包含web 控制器类 mail/ contains view files for e-mails

yii2 basic 简洁安装教程

虽然yii官网上说叫咱们用composer安装来安装,但是鄙人感觉这样的安装方式会将自己写的代码共享到github中,因此不太建议大家这样用.下面来给大家介绍basic简洁的安装方法. 第一步,下载basic,没下载的网友们可以到这下载 http://www.yiichina.com/download 第二步,解压打web访问目录.本人用的是xampp,因此就放在了htdocs里面,上图 第三步,在页面中直接访问localhost/basic(不同的apache访问不同,这是xampp下的比较方

(1) basic javascript mvc pattern

var Class = function(){ var klass = function(){ this.init.apply(this,arguments); }; //init klass.prototype.init = function(){}; return klass; }; var Person = new Class(); Person.prototype.init = function(){ this.name = "Jackey"; }; Person.protot

Yii2 初体验

看着Yii1.1有那么多的不爽,又看着Yii2一天天成熟起来,于是凑一个小项目的原型阶段,试着用Yii2搞一搞. 随手写了一点体会,以一个Yii1的熟练工人看向Yii2的视角,简单一说吧.(将来随时可能在本文后面追加补充) 默认的模板使用了bootstrap,很美观. basic版和advanced版的config文件不大一样.basic版里面,有web.php,后者没有. 设置为中文显示:config/web.php 中,增加一行 'language'=>'zh-CN'.然后 Home 变成了

yii2 linux安装教程

原文链接:Yii中文网(yii-china.com)[文档] 安装扩展 安装Yii最好的方式就是使用Composer安装,所以我们需要安装Composer,但是为了安装Composer,我们需要安装一下关于Composer和Yii2的许多扩展包,别担心下面的教程会教你所有的步骤.我们大部分的工作都是在linux终端执行的,我会给出所有的操作命令,你只需要拷贝这些命令并且在你的终端上运行即可. 那我们现在就开始吧,首先通过工具连接到你的linux终端(比如putty等),然后为了安装Compose

yii2.0框架安装心得

yii2.0安装心得 能够搜索到这篇文章的朋友相信是对yii框架有兴趣的,但是我不得不吐槽的是,这个安装过程确实让人头疼,接下来就让大家见证一下这个纠结的过程 根据官网的说法,安装这个框架需要用到composer,没有办法拉,先去大概的了解一下这个composer吧 什么是composer 根据composer的官网,它是这样解释的:composer是php用来管理依赖关系的工具,搞的这么复杂,直接说就是一个比较智能的下载工具不就好了.比如说我的项目是依赖yii框架的,而yii是依赖于其他东西的

《ASP.NET MVC 5 框架揭秘》

<ASP.NET MVC 5 框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121237812 上架时间:2014-8-1 出版日期:2014 年8月 开本:16开 页码:656 版次:1-1 所属分类:计算机 > 软件与程序设计 > .NET > ASP.NET 更多关于>>> <ASP.NET MVC 5 框架揭秘>   编辑推荐 如果你觉得自己对ASP.NET MVC 所知甚少,可利用本书来系统学习:如果你