资讯专栏INFORMATION COLUMN

Codeigniter 4.0-dev 版源码学习笔记之五——相对于 3.x 的变化

Youngdze / 805人阅读

摘要:支持命名空间是没有支持命名空间的。配置文件不再是简单数组了新的配置文件是以对象组织的,各个配置以对象的属性形式暴露出来。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。

前言

CI 为了追上“大家”的脚步,这次跨了一大步,尽量使用了更多的流行设计理念,甚至连 PHP 的支持版本都是从 7 开始起步的。我在之前阅读源码的同时也发现了很多变化的地方,在此把已经发现的列举出来,不过肯定是不全的,因为我还没读完(逃跑~)。等再发现新的值得一聊的,并且能凑够一篇文章的内容的话,我会再继续写一篇的。

支持命名空间

CI 3 是没有支持命名空间的。导致有些人相加一层 service 的话是借助 model 或者是 library 实现的,用起来总是不伦不类。不知道有多少等 CI 4 ,其中有部分原因就是等它支持命名空间呢。

更好的支持 Composer

之前的版本,虽然支持了 Composer ,但是因为不支持命名空间,导致不能发挥 composer 的全部功力。于是大部分人依旧是去官网下了 zip 包,解压后吭哧吭哧自己造轮子。新版本应该能够很好的发挥 Composer 的功效了, packages 上的各种组件随便用了。

view 不再是 load 进来的了

之前,我们要处理 view 的话,要使用load->view 感觉上 controller 是主体, view 是被加载进来的。 CI 4 中 view 处理完毕后仅仅是个字符串,要在 controller 里 return 会核心里,由核心再处理输出,这样整个流程就更清晰了。

代码和资源文件分离了

新的代码组织方式要求将 web 站点根目录指向到 public 目录, public 目录仅仅一个入口文件以及静态的图片和 CSS 资源等,代码文件都在上一级目录中分布,这不仅可以使 web 目录更加简洁清晰,同时也能增加一些安全性。

配置文件不再是简单数组了

新的配置文件是以对象组织的,各个配置以对象的属性形式暴露出来。

路由变化
增加闭包形式定义路由

可以用闭包形式直接定义一个简单的路由,此路由可以不对应 controller ,举例如下:

$routes->add("feed", function()
   {
        return "Simple Hello World.";
    {
);
可以定义路由组

如果某一批路径有着相似的前缀,可以使用路由组,如后台程序,通常喜欢给每个路由前边都加上一个 admin 用于区分后台于前台的页面路径。此时可以如下定义:

$routes->group("admin", function($routes)
{
    $routes->add("users", "AdminUsers::index");
    $routes->add("blogs",  "AdminBlogs::index");
});

相当于定义了 admin/users 、 admin/blogs 两个路由。

可以直接定义 RESTful 形式路由

可以很方便以以下形式定义此类型路由:

$routes->resource("users");

// 以上形式等价于:
$routes->get("users",               "Users::listAll");
$routes->get("users/(:segment)",    "Users::show/$1");
$routes->post("users",              "Users::create");
$routes->put("users/(:segment)",    "Users::update/$1");
$routes->delete("users/(:segment)", "Users::delete/$1");

当然,浏览器不能直接处理 put 等形式请求,需要借助 post 并加一个 _method 的隐藏域来完成。

关闭自动路由

可以像 Laravel 一样仅识别已经配置的路由,关闭后,处理完配置路由后如还没有发现匹配控制器将不会再继续按着约定去自动寻找控制器文件。设置方法如下:

$routes->setAutoRoute(false);
小结

以上是目前发现的其中一部分变化,其实 CI 4 变化还是比较大的。我在查看一部分源码后感觉有了很多 Laravel 的影子,或者说是现在比较流行的框架设计的思路。以后在后续的阅读过程中发现更多的有趣变化,我会继续摘录分享。

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

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

转载请注明本文地址:https://www.ucloud.cn/yun/22936.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 源码学习笔记之三——核心文件 Codeigniter.ph

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

    alighters 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之二——入口以及初始化操作

    摘要:通过这个函数可以很方便的在程序运行期间执行很多常见操作。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 index.php index.php 是整个框架的入口文件,也就是说所有的请求都要从它这里开始。因为 index.php 源码非常简洁,那么我们直接放一张源码截图,按着截图说一下源码。 showImg(https://segmentfault.com/img/re...

    _ivan 评论0 收藏0
  • Codeigniter 4.0-dev 源码学习笔记之六——控制器

    摘要:控制器严格来说,这个是控制器父类的源码。在中,控制器仅负责接到返回的组装的页面字符串,并回核心中,由核心再处理后续事宜。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 前言 其实一开始我是很纠结是否要写控制器的源码分析的,因为控制器的源码太少了,少到你不相信这是一个 MVC 里的一个重头。直觉里,大家都觉得控制器作为各个请求的入口,其后端应该有很多很多的代码支撑才可以...

    asce1885 评论0 收藏0

发表评论

0条评论

Youngdze

|高级讲师

TA的文章

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