慕课网,我的yii2学习笔记(基础篇)
一、关于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学习笔记(基础篇)的更多相关文章
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作
目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...
- Java学习笔记——基础篇
Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...
- java学习笔记-基础篇
Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...
- Python学习笔记基础篇-(1)Python周边
一.系统命令 1.Ctrl+D 退出Python IDLE input方法中输入EOF字符,键入Ctrl+D 2.命令行选项: -d 提供调试输出 -O 生成优化的字节码(.pyo文件) -S 不 ...
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器
目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...
- Python学习笔记——基础篇【第五周】——正在表达式(re.match与re.search的区别)
目录 1.正在表达式 2.正则表达式常用5种操作 3.正则表达式实例 4.re.match与re.search的区别 5.json 和 pickle 1.正则表达式 语法: import re # ...
- Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度
目录 1.算法基础 2.冒泡排序 3.时间复杂度 (1)时间频度 (2)时间复杂度 4.指数时间 5.常数时间 6.对数时间 7.线性时间 1.算法基础 要求:生成一个4*4的2维数组并将其顺时针旋 ...
随机推荐
- xmpp 协议之可扩展消息(messaging)与状态(presence)协议核心: RFC 3920
附:asmack已经不需要了,4.1以后的smack已经可以在android上使用了. XMPP Clients: http://xmpp.org/software/clients.html An ...
- 第二百五十二天 how can I 坚持
明天就要去旅游了...还不知道去哪呢,只知道要滑雪,要泡温泉,还要去西柏坡..哈哈. 其他没什么了吧.只是昨晚刷的鞋还没干,不知道明天会不会干,明天还得早走会,九点之前就得到. 还不知道坐车坐多长时间 ...
- Cocos2d-x 对于中文的支持-----iconv库
Cocos2d-x 对于中文的支持-----iconv库 转自:http://momowing.diandian.com/post/2013-01-16/40047183777 Jetion: 我们在 ...
- 学习php 韩顺平
1.动态语言的发展史 最早使用cgi 学习 apache 全世界最流行的web服务器 php运行流程 → apache→php文件→数据库→php文件→浏览器 php底层语言是c语言 jsp底层语言 ...
- 命令行刷机教程( 以Linux系统为例 )
//第一步adb device // 如果不能cd AndroidSDK/platform-toolsadb kill-server adb start-server //第二步adb reboot ...
- Table 样式设置
http://www.gzsums.edu.cn/webclass/html/table.html
- jsp界面动态时间显示
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Unix-Linux编程实践 学习点滴
1.结构体最后定义一个char p[0]有什么作用 2. 3. 4. 1.结构体最后定义一个char p[0] 有什么作用 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: ...
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...
- sql语句having子句用法,很多时候你曾忘掉
显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY reg ...