资讯专栏INFORMATION COLUMN

Codeigniter 4.0-dev 版源码学习笔记之六——控制器

asce1885 / 3378人阅读

摘要:控制器严格来说,这个是控制器父类的源码。在中,控制器仅负责接到返回的组装的页面字符串,并回核心中,由核心再处理后续事宜。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。

前言

其实一开始我是很纠结是否要写控制器的源码分析的,因为控制器的源码太少了,少到你不相信这是一个 MVC 里的一个重头。直觉里,大家都觉得控制器作为各个请求的“入口”,其后端应该有很多很多的代码支撑才可以的,然而事实相反,去掉注释后,一共才 60 行左右。

控制器之前

看控制器源码之前,我们还是要回顾一下,控制器是怎么来的。

请大家看截图,截图中有两个方法:分别是 createController 和 runController。

createController 负责把路由找到的 controller 类实例化。实例化时,可以看到 request 和 response 作为参数传递给了 controller 的构造方法,这也是为什么在定义 controller 时,如果定义了 __construct 方法一定要记得调用一下 parent::__construct() ,因为默认定义了 __construct 方法后会覆盖了父类的 __construct ,所以必须明确调用父类构造方法才能执行。

runController 是执行控制器过程,大致思路就是把刚刚实例话的对象拿过来,执行路由中找到的控制器方法。并且把输出返回。

控制器

严格来说,这个是控制器父类的源码。为控制器运行期间定义了一些常用的方法,如 post 参数验证,缓存等。下面具体说一下:

11-16 行:控制器父类的属性,这些属性可以定义控制器本身的状态。可以在自己定义的类中覆盖掉这些属性。 helpers 定义要加载的辅助方法,forceHTTPS 大于 0 时,可以指定当前设定值期间内强制到 https 。 validator 定义要验证的 post 内容的规则。

18-29 行:控制器父类的构造方法,在定义控制器时如果没定义自己的构造方法,这个方法会被默认执行,如果定义过将会覆盖掉这个方法,需要在构造方法的最前边执行 parent::__construct() 以保证这个方法中的初始化数据都能正常初始化。其中 forceHTTPS 方法是强制使用 https 协议,loadHelpers 可以默认自动加载需要的 helper 。

51-60 行: validate 方法,主要辅助验证 post 请求过来的各个字段。形式如下:

    if (! $this->validate($this->request, [
        "email" => "required|is_unique[users.email,id,{$userID}]",
        "name" => "required|alpha_numeric_spaces"
    ]))
    {
        return view("users/update", [
            "errors" => $this->errors
        ]);
    }

    // do something here if successful...

以上源码截取自 CI 4 官方手册。如果觉得验证规则那个比较乱的话,可以在 ConfigValidation.php 中自定义一个验证组,并用以下方式验证:

$this->validate($this->request, "userRules")
控制器之后

我们都知道,控制器会和 view 端交互,在之前的 CI 版本中,控制器会把 view load 进自己的生命周期中,直接处理 request 信息。个人也觉得这有些把 controller 的地位看得太重了。在 CI 4 中,控制器仅负责接到 view 返回的组装的页面字符串,并 return 回 codeigniter 核心中,由核心再处理后续事宜。

结语

本节简单的说了说控制器的父类,源码比较少,说的也就不多。下一节试着说说 view 。

此文可以转载,但转载前需要发邮件到imustgxd*sina.cn进行沟通,未沟通的均视作侵权。 转载同时需注明链接,并保留此段文字。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22957.html

相关文章

  • Codeigniter 4.0-dev 源码学习笔记之一——前言以及 CI 4 预览

    摘要:版权声明可转载,但不论任何媒体都需要在转载前与本人沟通,并在转载时注明出处。的各个核心模块以模块名为目录名分别存储在这个目录下。下一篇文章会涉及到和。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 写在前面: 为什么选择开发过程中的 CI 4 作为源码解读版本:(1)首先我选 CI 是因为它之前的稳定版都是相对比较轻量小巧的,而且可以认为是简单的。(2)为什么没有选...

    MSchumi 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之四——详细路由过程

    摘要:行,判断如果为空,那么返回默认路由。行,把处理完毕后找到的返回。方法该方法是自动按着约定规则去目录去找路由的过程。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 我个人觉得在当前 MVC 流行的架构下,要想去了解一个框架,或者是一个基于此架构下的应用程序,最好的入手方式就是先看路由,虽然路由不是 MVC 里的任何一个,但是知道了路由的来龙去脉就知道了整个框架或者...

    NSFish 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之五——相对于 3.x 的变化

    摘要:支持命名空间是没有支持命名空间的。配置文件不再是简单数组了新的配置文件是以对象组织的,各个配置以对象的属性形式暴露出来。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 CI 为了追上大家的脚步,这次跨了一大步,尽量使用了更多的流行设计理念,甚至连 PHP 的支持版本都是从 7 开始起步的。我在之前阅读源码的同时也发现了很多变化的地方,在此把已经发现的列举出来,不...

    Youngdze 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之七—— View 视图

    摘要:行处理视图文件名后缀。结语从源码上看,使用了原始作为模版机制使得视图逻辑非常简单。无非也就是把视图进来,用输出缓冲把执行结果拿到即可。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 CI 的 View 没有像 Laravel 等一些流行框架一样设计的那么重,有自己的一套模版机制,CI 一直采用纯天然的 PHP 模板形式,纯天然的好处是不用再学习一套模板语言了,缺...

    LiangJ 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之三——核心文件 Codeigniter.ph

    摘要:行,是否强制访问。行,尝试处理此次请求,详细见方法。至此,的执行主流程完毕。小结是的核心文件,它被调用后,完成了诸多的主流程操作。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 Codeigniter.php 是 CI 4 的核心所在,在这里接收并处理了 request 请求,安全检查,缓存处理, URL 解析以及路由匹配,执行过滤器,加载运行 Controll...

    alighters 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<