• yii2 basic版 MVC 部分


    一、model

    1、什么是模型

    • 模型是 MVC 模式中的一部分,是表现业务数据、规则和逻辑的对象
    • 可通过继承 yiiaseModel 或它的子类(activeRecord)来定义模型类,基类 yiiaseModel 支持许多实用的特性
    • Model 类也是更多高级模型例如 Active Record 活动记录的基类。

    2、yiiaseModel 支持以下实用特性:

    属性 : 表现业务数据,可以像普通类属性或数组一样被访问 (e.g. public $name)
    属性标签 :指定属性显示出来的标签 (例如: modelsContactForm 类,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、验证规则 :确保数据数据符合所申明的验证规则(例如在 modelsContactForm 类,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'], // 验证码必须填写正确
      ];
    }

    验证时采用 yiiaseModel::validate() 方法触发数据验证,如果有数据验证失败,将自动把 yiiaseModel::hasErrors() 属性置为 true,
    可以使用 yiiaseModel::getErrors() 来查看错误详情。e.g:

    <?php 
    $model = new EntryForm();
    $model -> name = 'Carroll';
    $model -> email = 'wrong';
    if($model -> validate()){
      // 验证成功
    }else{
      // 验证失败
      // 使用 $error = $model -> getErrors(); var_dump($errors); 获取错误详情。
    }
    • yiiaseModel 用于普通模型类的父类并与数据表无关
    • yiiaseactiveRecord 用于普通模型类的父类并与数据表有关
    • yiiaseactiveRecord 也是继承 yiiaseModel ,但是增加了数据库处理


    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、如何创建布局

    • 布局也是视图,它可以像普通视图一样创建
    • 布局默认存储在 @appviewlayouts 下面

    3、如何变幻布局

    • 默认会使用 @appviewlayoutsmain.php布局文件
    • 更换整个类中的布局 : public $layout = 'dcr';
    • 更换某一个页面的布局 : 在方法中添加 $this -> layout = 'dcr';
    • 如果一个页面不需要任何布局,只需要在方法中设置 $this->layout=false;

    4、布局文件的数据

    • 两个预定义变量 $this $content
    • 和视图中的 $this 一样,$this 指向 yiiwebView 的实例
    • $content 就是控制器渲染出来的结果,每一页的结果都不同。

    5、布局文件的结构

    <?php $this->beginPage() ?>        // 在布局的开始处调用 $this 指向 yiiwebview 来管理和渲染这个视图文件,用来标识一个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 部分
    •  从 yiiaseController 继承而来
    • 具体来说,是从模型对象中拿到需要的数据,然后调用视图模板文件来渲染这些数据,然后生成输出响应信息

     2、组成

    • 控制器主要有动作组成
    • 动作是控制器类中的方法
    • 一个动作对应一个页面

    3、render()

    查看方法:从类参考手册中的yiiwebcontroller所有方法中查看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、yiiwebRequest::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

  • 相关阅读:
    GUI编程
    网络编程
    线程池详解_3
    多线程详解_2
    注解和反射_1
    多线程详解_1
    javaEE简要总结
    MarkDown使用教程简单介绍
    com.sun.xxx.utils不存在问题的解决
    解决npm install安装慢的问题
  • 原文地址:https://www.cnblogs.com/chrdai/p/8004737.html
Copyright © 2020-2023  润新知