一、关于PHP知识点

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

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

$model = new \Class()

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

use a\Class;
use b\Class 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 集合(yii\web\CookieCollection)
$cookies = Yii::$app->response->cookies; // 在要发送的响应中添加一个新的cookie
$cookies->add(new \yii\web\Cookie([
'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 yii\helpers\Html;
use yii\helpers\HtmlPurifier;
//$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 app\model\users;
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 app\models\orders;
Class Users extends \yii\db\ActiveRecord{
  public function getOrders(){
    //asArray 将查询结果从对象转换成数组
    return $this->hasMany(Orders::className(),["user_id"=>"id"])->asArray();   }
}

慕课网,我的yii2学习笔记(基础篇)的更多相关文章

  1. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  2. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

  3. Java学习笔记——基础篇

    Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...

  4. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  5. Python学习笔记基础篇-(1)Python周边

    一.系统命令 1.Ctrl+D 退出Python IDLE input方法中输入EOF字符,键入Ctrl+D 2.命令行选项: -d   提供调试输出 -O 生成优化的字节码(.pyo文件) -S 不 ...

  6. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  7. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  8. Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器

    目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...

  9. Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)

    目录 1.正在表达式 2.正则表达式常用5种操作 3.正则表达式实例 4.re.match与re.search的区别 5.json 和 pickle 1.正则表达式   语法: import re # ...

  10. Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度

    目录 1.算法基础 2.冒泡排序 3.时间复杂度 (1)时间频度 (2)时间复杂度 4.指数时间 5.常数时间 6.对数时间 7.线性时间 1.算法基础  要求:生成一个4*4的2维数组并将其顺时针旋 ...

随机推荐

  1. SRM 514 DIV1 500pt(DP)

    题目简述 给定一个H×W大小的矩阵,每个格子要么是1~9中的一个数,要么是".",要求你把“.”填成具体的数字(1~9),并且符合以下两个要求: 对于所有的整数r 和 c( 0 & ...

  2. [转]虚方法(virtual)和抽象方法(abstract)的区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法pub ...

  3. 最大连续子数和问题-homework-03

    一.说明 这次的作业做的不好,一小点怨念ing····· 首先向TA说明下,我的小伙伴“丢下”我后我不知道,以至于发现剩下我一个的时间有点晚,我机智地找到了一个3个人的小组,又叫到了一个小伙伴,但是悲 ...

  4. Spark SQL应用

    Spark Shell启动后,就可以用Spark SQL API执行数据分析查询. 在第一个示例中,我们将从文本文件中加载用户数据并从数据集中创建一个DataFrame对象.然后运行DataFrame ...

  5. Spring properties dependency checking

    In Spring,you can use dependency checking feature to make sure the required properties have been set ...

  6. OAuth 2.0介绍学习

    OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服务商之间的被批 ...

  7. [支付]微信NATIVE扫码支付JAVA实现

    步骤: 1.预订单 2.接受微信返回的url 3.将url转为二维码显示到页面上 4.扫码支付 5.接收微信的异步通知,在这步修改订单的状态 6.收到异步通知的同时给微信返回指定数据,告知对方已成功处 ...

  8. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  9. 沉金板VS 镀金板

    沉金板VS 镀金板一.沉金板与镀金板的区别1.原理区别FLASH GOLD 采用的是化学沉积的方法!PLANTINGGOLD 采用的是电解的原理!2.外观区别电金会有电金引线,而化金没有.而且若金厚要 ...

  10. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...