前言
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', 'Admin\Users::index');
$routes->add('blogs', 'Admin\Blogs::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... ) ,并保留此段文字。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。