zoukankan      html  css  js  c++  java
  • 慕课网,我的yii2学习笔记(基础篇)

    一、关于PHP知识点

    1、命名空间:存放类文件的空间,可以随便定义,建议与类文件目录一致,方便管理。

    注:(1)、如果类没有设置命名空间,默认为顶级命名空间,在程序中可以用一下方式实例化。

    $model = new Class()

      (2)、如果引入类名相同,可以用一下代码区分。

    use aClass;
    use bClass as B_Class;

     2、session:

      每个浏览器存储网站的session时会产生一个PHPSESSID,对应到服务器用存储session文件的名字。

    二、关于Yii知识点

    教程3-2:控制器之请求处理

      获取get/post参数时,如果不存在可设置第二个参数为默认值。  

    $request = Yii::$app->request;
    $request->get("id",10);

    学东西要看完文档先。

    $request->userIp; //获取用户ip地址,有点厉害。

    $userHost = Yii::$app->request->userHost; //返回 example.com, URL中的host name。

    if ($request->isAjax) { /* 该请求是一个 AJAX 请求 */ }

    if ($request->isGet) { /* 请求方法是 GET */ }

    if ($request->isPost) { /* 请求方法是 POST */ }

    if ($request->isPut) { /* 请求方法是 PUT */ }

    教程3-3: 控制器之响应处理

    官网文档地址 :http://www.yiichina.com/doc/guide/2.0/runtime-responses

    //相应组件的两个常见应用:跳转和下载
    $response->headers->add('location','http://www.baidu.com'); //通过相应组件向头部文件中添加一个“跳转”
    $this->redirect('http://www.baidu.com'); //通过$this方法调用yii封装好的redirect方法来实现“跳转”
    
    $response->headers->add('content-disposition','attachment; filename="a.jpg"'); //以附件的形式保存请求到的数据,并能进行下载
    $response->sendFile('./robots.txt'); //通过响应组装封装好的sendFile()方法来下载指定的文件;一般是调用index.php入口文件中指定的文件通过'./文件名'的方式找到该文件

    教程3-4:控制器之session处理

      实现了 the ArrayAccess interface的类 可以当作数组使用 

      不同浏览器会产生不同的session,系统是根据sessionID来进行识别的

    //1.调用session组件 
      $session = Yii::$app -> session;
    //2.判断session是否开启
    if($session->isActive)
    {
      echo "Session is not acive";
    }
    //3.开启session
      $session -> open;
    //4.设置session值
      $session -> set('user','张三');
    //5.获取session值
      echo $session -> get('user');
    //6.删掉session值
      $session -> remove('user');
    

    //通过数组方式来操作session $session['user'] = "张三";// 设置session值 echo $session['user']; //取出session数据 unset($session['user']);//通过unset 来删除session

    教程3-5:控制器之cookies处理

      1、获取cookie

    $cookies = Yii::$app->request->cookies;
    $user = $cookies->getValue("user","value");//第二个参数为默认值

    // 可将 $cookies当作数组使用
    if (isset($cookies['language'])) { $language = $cookies['language']->value; } 
    //判断是否存在名为"language" 的 cookie 
    if ($cookies->has('language')) ...
    if (isset($cookies['language'])) ...

      2、设置cookie

    // 从"response"组件中获取cookie 集合(yiiwebCookieCollection)
    $cookies = Yii::$app->response->cookies;
    
    // 在要发送的响应中添加一个新的cookie
    $cookies->add(new yiiwebCookie([
        'name' => 'language',
        'value' => 'zh-CN',
    ]));
    
    // 删除一个cookie
    $cookies->remove('language');
    // 等同于以下删除代码
    unset($cookies['language']);

      3、cookie的验证

      配置文件中设置,建议不要放到版本控制器中。

    return [
        'components' => [
            'request' => [
                'cookieValidationKey' => 'fill in a secret key here',
            ],
        ],
    ];

     4-3:视图之数据安全

    视图中过滤控制器传过来的数据

    <?php 
    use yiihelpersHtml;
    use yiihelpersHtmlPurifier;
    //$view_str = "hello <script>alert(1)</script>";
    ?> 转译直接显示字符,不管是不是js代码 <?= Html::encode($view_str);?>
    视图输出如下:
    hello <script>alert(1)</script>
    过滤js代码,只显示html代码
    <?= HtmlPurifier::process($view_str);?>
    视图输出如下:
    hello

    5-3:数据模型之单表查询

    批量查询,使用batch循环,降低内存损耗。

    // 批量查询,分批查询,每次从数据库读取10条记录,循环结束销毁内存记录。内存记录始终只有10条
    foreach(users::find()->batch(10) as $users){
      print_r(count($users));
    }

     5-6:数据模型之单表数据修改

    1、关联查询结果缓存

    $users = Users::find()->one();
    //查询之后会把orders存入缓存第二次查询时无需到数据库获取
    $orders = $users->orders; // select * from orders where user_id = $users->id;
    //删除缓存数据
    unset($users->orders);
    //重新查询
    $orders2 = users->orders; // select * from orders where user_id = $users->id;

    2、优化关联查询的多次查询

    //控制器
    use appmodelusers;
    class UsersController extend Contorller{
      public function actionIndex(){
        //关联多次查询 优化了查询次数,只需查询两次数据库即可。
        //1、select * from users
        //2、select * from orders where users_id in (...);
        //3、将查询结果分配到各个user下的orders中     $users
    = User::find()->with("orders")->all();     foreach($users as $user){      $orders = $user->orders;     }
      } }

    //模型
    use appmodelsorders;
    Class Users extends yiidbActiveRecord{
      public function getOrders(){
        //asArray 将查询结果从对象转换成数组
        return $this->hasMany(Orders::className(),["user_id"=>"id"])->asArray();

      }
    }
  • 相关阅读:
    获取和设置iframe中的元素
    css隔行换色样式修改
    在本地打开网页
    HTML-embed标签详解
    GlusterFS缺点分析[转]
    设计新Xlator扩展GlusterFS[转]
    C语言:全局变量在多个c文件中公用的方法 [转]
    const char*, char const*, char*const的区别
    C 语言字符数组的定义与初始化
    滑动窗口机制[转]
  • 原文地址:https://www.cnblogs.com/jiangxiaochang/p/5878879.html
Copyright © 2011-2022 走看看