TP5.1的Request以及构造方法注入以及助手函数的使用

第一个是构造方法的使用

<?php

namespace app\index\controller;

use think\Request;

class Index 
{
    /**
     * @var \think\Request Request实例
     */
    protected $request;
    
    /**
     * 构造方法
     * @param Request $request Request对象
     * @access public
     */
    public function __construct(Request $request)
    {
		$this->request = $request;
    }
    
    public function index()
    {
		return $this->request->param('name');
    }    
}

 这样子就可以在下面的方法中使用$this->request进行获取;

为什么要用这种方法呢?当然并不是一定的,如果你要直接用的话你可以直接使用

return $this->request->param('name');

只要的你类继承了系统的基类

但是还有一个就是比较不好的就是Request:: 的使用情况:

<?php

namespace app\index\controller;

use think\Controller;
use think\facade\Request;

class Index extends Controller
{
    
    public function index()
    {
		return Request::param('name');
    }    
}

首先他无法在__contruct的构造函数中进行获取

其次他无法直接获取出一个数组:情况是

只是用Request::param('arr')无法获取到参数值(会报错),但可以这么做,$params = Request::param();$arr = $params['arr'];这样可以获取到数组,但没有Request::param('arr')来的直接方便,这应该是方法设计上的缺陷吧!

简单来说如果你的构造函数内需要用到request信息的话就不能使用Request这个方式。

但是有一个小技巧可以绕过去,那就是tp5.1的前置操作

//前置操作
    protected $beforeActionList = [
        'inSet',      
    ];
    public function inSet()
    {   

          $id = Request::param('id');

    }

这样子就可以进行类似构造函数的使用相对来说比较方便。但是看情况而用

构造函数在使用一次new的时候已经执行并且只执行一次

而前置函数你每次使用类方法的时候都会执行一次,所以说本地项目推荐使用构造

接口项目本人推荐使用前置方法!到此request相关介绍完毕,喜欢的可以点个关注吧!谢谢!

posted @ 2018-07-26 10:57  执码挥战  阅读(1640)  评论(0编辑  收藏  举报