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

前言

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

控制器以前

看控制器源码以前,咱们仍是要回顾一下,控制器是怎么来的。后端

Controller 建立源码截图

请你们看截图,截图中有两个方法:分别是 createController 和 runController。缓存

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

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

控制器

控制器源码截图

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

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

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

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

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 中自定义一个验证组,并用如下方式验证:3d

$this->validate($this->request, 'userRules')

控制器以后

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

结语

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

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

相关文章
相关标签/搜索