首页 > 编程语言 >ThinkPHP6学习笔记2

ThinkPHP6学习笔记2

时间:2023-08-19 18:35:07浏览次数:43  
标签:content get request Request 笔记 ThinkPHP6 学习 facade input

门面模式 facade

facade 不能在模型里面建立关联关系: 这里是属于注入是不能使用facade类的

Facade 怎么获取model实例对象

- facede instance方法

$model = TestFacadeModel::instance();



- 容器类直接实例化
$model = app(TestModel::class,[],true);


- facade定义类 新建实例化方法
public static function getNewInstance(...$args){
	return self::createFacade(\app\model\TestModel::class,$args,true);
}

依赖注入的的时候需要使用原生的类

依赖注入的优势是支持接口的注入,而Facade则无法完成。

tp6 Request类

  • app\Request 控制器自动注入Request对象,继承于 think\Request
$this->request->get('name'); // 获取get值
$this->request->post('name'); // 获取post值
$this->request->getContent();// 获取body内容

  • think\Request
    TP框架请求基类

  • think\facade\Request
    think\Request 类的门面模式

think\facade\Request::get('name');// 获取get参数

think\facade\Request::file('file');// 获取文件对象
  • Request() 返回的对象就是 app\Request

  • TP框架设置请求对象

 
    // 输入body内容获取
    public function __construct()
    {
        // 保存 php://input
        $this->input = file_get_contents('php://input');
    }

      // __make方法 请求对象设置
      $request->header = array_change_key_case($header);
      $request->server = $_SERVER;
      $request->env    = $app->env;

      $inputData = $request->getInputData($request->input);

      $request->get     = $_GET;
      $request->post    = $_POST ?: $inputData;
      $request->put     = $inputData;
      $request->request = $_REQUEST;
      $request->cookie  = $_COOKIE;
      $request->file    = $_FILES ?? [];
      
      //  

=========== 

  • 请求的json,为什么post可以直接获取到,看下面代码
  // 获取body原始内容 
   public function getContent(): string
    {
        if (is_null($this->content)) {
            $this->content = $this->input;
        }

        return $this->content;
    }

  $inputData = $request->getInputData($request->input);
   $request->post    = $_POST ?: $inputData;

   protected function getInputData($content): array
    {
        $contentType = $this->contentType();
        if ('application/x-www-form-urlencoded' == $contentType) {
            parse_str($content, $data);
            return $data;
        } elseif (false !== strpos($contentType, 'json')) {
            return (array) json_decode($content, true);  // 
        }

        return [];
    }

组装 mysql whereRaw


$whereRaw = '1=1';
if (!empty($params['testing_value'])) {
	$whereRaw = 'appreciation & ' . $params['testing_value'];
}
$query->whereRaw($whereRaw)

SELECT * FROM `oc_t_product_reserve` WHERE  `is_del` = 0  
AND ( appreciation & 512 ) ORDER BY `create_date` DESC LIMIT 0,10

appreciation & 512 > 0 才算满足确实算是可以的

mysql field排序函数

$res = PickTaskModel::with([])
   ->orderRaw('field(task_status,4,0,5,3),id asc')
	->select();

标签:content,get,request,Request,笔记,ThinkPHP6,学习,facade,input
From: https://www.cnblogs.com/zqsb/p/17133946.html

相关文章

  • python机器学习经典算法代码示例及思维导图(数学建模必备)
    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部分是相关算法的代码实现(其实就是......
  • python+playwright 学习-73 page.wait_for_selector()
    前言网页上的元素有不同状态,有些元素本来不在DOM里,点击某个按钮后才出现。有些元素是本来就已经在DOM里是隐藏的状态,点某个按钮后才变成显示状态。如果我们想让元素到达指定的状态再下一步操作,可以用page.wait_for_selector()方法。page.wait_for_selector()方法wait_for_s......
  • MySQL技能树学习
    在MySQL相关技能树的学习过程当中,存在一些问题,比如在移动端的学习体验和PC的学习体验不一样,这个相信学习过的朋友都有所感觉。尤其移动端的技能树切换、同一个技能树内,不同节点的切换,都比较繁琐。PC感觉还好,同样不太好的还有在移动端的返回功能比较难用,   整体而言,MySQL的技......
  • KMP 字符串匹配 学习笔记
    前言最近才发现自己写了后缀数组,但并没有其他的字符串算法,今天先把\(KMP\)字符串匹配先讲一下。算法核心对于字符串匹配,最朴素的方法就是一个字符一个字符地匹配,找到不同的就直接换一个地方匹配。我们先来看一组样例:\(ababababe\)\(ababe\)对于这组样例,暴力的方法就是直......
  • 【笔记】凸优化 Convex Optimization
    DifferentiationDef.Gradient\(f:{\calX}\sube\mathbb{R}^N\to\mathbb{R}\)isdifferentiable.Thenthegradientof\(f\)at\({\bfx}\in\cal{X}\),denotedby\(\nablaf({\bfx})\),isdefinedby\[\nablaf({\bfx})=\begin{bmatrix......
  • GNN学习 Knowledge Graph Embedding(更新中)
    GNN学习KnowledgeGraphEmbedding前面提到的方法都是只有一种边的类型,接下来要扩展到有向,多种边的类型的图上,即异质图(heterogeneousgraph)异质图有这样的几种类型:RelationalGCNsKnowledgeGraphsEmbeddingsforKGCompletion一个异质图可以被定义为\(G=(V,E,R,T)\)......
  • python+playwright 学习-72 设置window.navigator.webdriver属性为false 跳过网站反爬
    前言有些网站有反爬机制,比如用代码启动的浏览器会被检测到,需要人机验证,用脚本去点击或者滑动滑动虽然能滑动,但是会认证失败。用playwright和selenium启动的浏览器都会用个webdriver属性。浏览器会根据这个属性判断是否是人工正常操作。window.navigator.webdriver属性人......
  • c语言笔记4
    c语言笔记4(指针)1.指针的应用1.1内存空间32位机:一次处理数据的大小4B(字节)64位机:一次处理数据的大小8B(字节)计算处理数据的最小单位是1B(字节),计算存储数据的最小单位二进制的1b(位)一个程序启动后的进程分区:栈、堆、全局区、常量区、代码区内存寻址:(32位)最大......
  • 2023-Q2 学习记录
    2023-Q2学习记录日期学习/提升/事项2023年4月11日Eureka搭建、使用;Ribbon、load-Balance的使用;2023年4月12日使用Hystrix进行熔断的操作;Hash表第一部分;2023年4月13日解决Hystrix的使用bug;Hash表第二、三部分;字符串是否由多个子串组成......
  • 【刷题笔记】25. Reverse Nodes in k-Group
    题目Givenalinkedlist,reversethenodesofalinkedlistkatatimeandreturnitsmodifiedlist.kisapositiveintegerandislessthanorequaltothelengthofthelinkedlist.Ifthenumberofnodesisnotamultipleofkthenleft-outnodesint......