欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > ThinkPHP 8高效构建Web应用-获取请求对象

ThinkPHP 8高效构建Web应用-获取请求对象

2025/2/23 10:18:06 来源:https://blog.csdn.net/brucexia/article/details/144976801  浏览:    关键词:ThinkPHP 8高效构建Web应用-获取请求对象

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客

《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书

使用VS Code开发ThinkPHP项目-CSDN博客

编程与应用开发_夏天又到了的博客-CSDN博客

Request对象由ThinkPHP 框架实例化,开发者需要手动实例化Request对象。ThinkPHP 框架提供了4种方法来获取Request对象,读者可以根据自己的项目要求或者个人习惯,固定使用一种获取方式,并保持一致性以提高开发效率。

1. 继承BaseController

前面的内容提到过,BaseController提供了Request实例和App实例,因此可以直接继承BaseController,再通过$this->request获取请求实例。

2. 调用助手函数

笔者常用的方法是,在ThinkPHP 框架底层通过依赖注入容器对请求对象进行单例处理,只有第一次调用request()函数会自动创建请求对象,以避免多次调用产生的开销问题。

笔者推荐使用该方法获取请求对象,具体用法参看下面示例。

【示例6-6】

<?php
// 控制器
namespace app\controller;use app\BaseController;class Index extends BaseController
{public function index(){$url = request()->url();return $url;}
}

启动服务器后,在浏览器中访问http://localhost:8000,查看输出结果。

3. 构造方法注入

在未继承BaseController的情况下,我们可以定义一个Request属性和对应的构造方法,框架会自动通过依赖注入构造请求对象。具体示例如下。

【示例6-7】

新建app/controller/Index.php文件,代码如下:

<?php
// 控制器
namespace app\controller;use app\Request;class Index
{protected Request $request;/*** @param Request $request*/public function __construct(Request $request){$this->request = $request;}public function index(){return $this->request->url();}
}

启动服务器后,在浏览器中访问http://localhost:8000,查看输出结果。从示例代码可以发现,通过构造方法注入请求对象代码量有点多,因此一般不建议使用该方法。

4. 静态方法调用

某些场景下未使用依赖注入,可以通过Request门面来获取Request对象。具体示例如下。

【示例6-8】

新建app/controller/Index.php文件,代码如下:

<?php
// 控制器
namespace app\controller;use think\facade\Request;class Index
{public function index(){return Request::url();}
}

启动服务器后,在浏览器中访问http://localhost:8000,查看输出结果。

5. 操作方法注入

构造方法的注入需要给控制器定义相关的属性。而操作方法的注入,只需要直接调用参数即可,不需要给控制器定义额外的属性;其缺点是只能在这个操作方法内部调用。具体示例如下。

【示例6-9】

新建app/controller/Index.php文件,代码如下:

<?php
// 控制器
namespace app\controller;use think\Request;class Index
{public function index(Request $request){return $request->url();}
}

启动服务器后,在浏览器中访问http://localhost:8000,查看输出结果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com