摘要:在版中,我们将更加模块化层,并构建全新的类结构来同时处理的请求和响应。类类用于把程序的执行结果返回给客户端。类会捕获控制器的输出,并自动设置为响应的主体。在需要的时候,框架为你提供了精确控制响应的能力。
CodeIgniter 4 对输入和输出的处理方式做了一个较大的改变。在上一个版本中,包括最新的 V3 版,输入和输出分别是用两个包含相关函数的类来处理的。这样的处理方式背后虽然没有什么高深的技术,但却能简单直接的实现功能。在 V4 版中,我们将更加模块化 HTTP 层,并构建全新的类结构来同时处理 HTTP 的请求和响应。
概览在开发 Web 应用时(不同于 CLI 程序),你只需关心两个类:IncomingRequest 和 Response。
IncomingRequest 类IncomingRequest 类包含了 HTTP 请求和该请求附带的数据,包括:
GET、POST、SERVER 和 ENV 等环境变量
HTTP 请求头
Cookie
当前请求的 URL 对象
上传的文件
并且还包括常见的请求信息比如:
客户端的 IP 地址
是否为 Ajax 请求
是否为 CLI 请求
是否为 HTTPS
如果你对 IncomingRequest 这个类名感到奇怪,或者说 IncomingRequest 是不是可以简单的称为 Request?答案是否定的,因为已经有另一个包含 GET 和 POST 等变量的更为通用的 Request 类,但这个类不包括详细的 HTTP 请求信息。一个请求通常只做两件事:一个是浏览器客户端发送请求到服务器(连入),或者是当前服务器发送请求到外部服务器(连出)。
Response 类Response 类用于把程序的执行结果返回给客户端。你可以设置 HTTP 响应头,或直接发送内容到客户端,等等。Response 类提供了一些便捷方法比如:
设置适当的 no-cache 头信息
处理 HTTP 缓存头信息
重定向页面
一个简单的例子上面说的这些看起来好像很有科技含量,但其实很简单。这些类的实例已作为属性放到每个控制器中,如果你觉得很麻烦,则无需直接使用这些属性。Response 类会捕获控制器的输出,并自动设置为响应的主体。一个简单的 Hello World 看起来像这样:
class Home extends CodeIgniterController { public function index() { echo "Hello World!"; } }
易如反掌。
在需要的时候,框架为你提供了精确控制响应的能力。你可以创建复杂的 HTTP 缓存策略,并与 IncomingRequest 类一起通过内容协商定制响应内容。
下面是一个稍微复杂一点的例子,你会发现代码很容易看明白,并且处理的很简单。
class Home extends CodeIgniterController { public function __construct(...$params) { parent::__construct(...$params); // This controller is only accessible via HTTPS if (! $this->request->isSecure()) { // Redirect the user to this page via HTTPS, and set the Strict-Transport-Security // header so the browser will automatically convert all links to this page to HTTPS // for the next year. force_https(); } } public function index() { $data = [ ... ]; // Set some HTTP cache rules for this page. $this->response->setCache([ "max-age" => 300, "s-max-age" => 900, "etag" => "foo" ]); // Return JSON $this->response->setContentType("application/json") ->setOutput(json_encode($data)); } }
在这个例子中,我们主要做了三件事。首先,通过将当前 URL 重定向到 HTTPS URL,并设置一个 Strict-Transport-Security 响应头(这种方式已被很多主流浏览器所支持,在发送请求前通过浏览器自动将 HTTP 请求转换成 HTTPS 请求),来强制这个页面以 HTTPS 的方式访问;然后,我们通过设置一些 HTTP 缓存规则来帮助浏览器正确处理缓存,这意味着能减少 HTTP 请求量,减轻服务器负担,提高性能;最后,我们输出 JSON 数据给用户,并确保内容类型是正确的。
希望这篇文章能有助于大家粗略的了解 CodeIgniter 的未来,让大家意识到改变并不可怕。:) 未来将敲定框架更多的细节,直到形成一个相对稳定的架构,并且会撰写更多的文章来讲述这些内容。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/21485.html
摘要:然而事实上服务器可以帮我们处理某些形式的内容协商,我们通常不太善于利用这一点,但并不意味着服务器不能处理这些信息。但如果你想用,那在中使用内容协商也是很容易的。 当我关注到 HTTP 层的时候,发现很多 CIer 对内容协商还不是很了解,下面我们一起来探讨一下什么是内容协商,以及如何在即将到来的 CodeIgniter 4 中使用他。 什么是内容协商? 简而言之,内容协商是指客户端和服...
摘要:行,是否强制访问。行,尝试处理此次请求,详细见方法。至此,的执行主流程完毕。小结是的核心文件,它被调用后,完成了诸多的主流程操作。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 Codeigniter.php 是 CI 4 的核心所在,在这里接收并处理了 request 请求,安全检查,缓存处理, URL 解析以及路由匹配,执行过滤器,加载运行 Controll...
摘要:核心变化从第一版发布以来,社区发生了巨大变化。这意味着系统必须全部重写。暂时不会为一个即将停止支持的版本发布新版本。路由路由功能将被更新。改进的日志系统日志系统将被改进,但具体细节尚未确定。第一阶段第一阶段将侧重于抓住框架最重要的部分。 我们综合考虑了社区的愿望和意见后,也对什么样的未来对 CI 是最合适的做了一些思考,然后,CI 理事会对框架的未来做出了一些决策。预告一下,未来将会有...
摘要:行,判断如果为空,那么返回默认路由。行,把处理完毕后找到的返回。方法该方法是自动按着约定规则去目录去找路由的过程。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 我个人觉得在当前 MVC 流行的架构下,要想去了解一个框架,或者是一个基于此架构下的应用程序,最好的入手方式就是先看路由,虽然路由不是 MVC 里的任何一个,但是知道了路由的来龙去脉就知道了整个框架或者...
阅读 2122·2023-04-26 00:00
阅读 3175·2021-09-24 10:37
阅读 3463·2021-09-07 09:58
阅读 1502·2019-08-30 15:56
阅读 2199·2019-08-30 13:11
阅读 2267·2019-08-29 16:38
阅读 915·2019-08-29 12:58
阅读 1824·2019-08-27 10:54