首页 技术 正文
技术 2022年11月15日
0 收藏 965 点赞 3,834 浏览 3480 个字

一、关于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();  }
}
上一篇: 【KeyCode 键码】
下一篇: php中环境变量
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848