[codeigniter4]Upgrading from 3.x to 4.x
CodeIgniter 4 is a rewrite of the framework, and is not backwards compatible. It is more appropriate to think of converting your app, rather than upgrading it. Once you have done that, upgrading from one version of CodeIgniter 4 to the next will be straightforward.
The "lean, mean and simple" philosophy has been retained, but the implementation has a lot of differences, compared to CodeIgniter 3.
There is no 12-step checklist for upgrading. Instead, start with a copy of CodeIgniter 4 in a new project folder, however you wish to install and use it, and then convert and integrate your app components. We'll try to point out the most important considerations here.
Not all of the CI3 libraries have been ported or rewritten for CI4! See the threads in the CodeIgniter 4 Roadmap subforum for an uptodate list!
Do read the user guide before embarking on a project conversion!
Downloads
- CI4 is still available as a ready-to-run zip or tarball, which includes the user guide (though in the docs subfolder
- It can also be installed using Composer
Namespaces
- CI4 is built for PHP7.1+, and everything in the framework is namespaced, even the helpers
Application Structure
- The framework still has
application
andsystem
folders, with the same interpretation as before - The framework now provides for a
public
folder, intended as the document root for your app - There is also a
writable
folder, to hold cache data, logs, and session data - The
application
folder looks very similar to that for CI3, with some name changes, and some subfolders moved to thewritable
folder - There is no longer a nested
application/core
folder, as we have a different mechanism for extending framework components (see below)
Class loading
- There is no longer a CodeIgniter "superobject", with framework component references magically injected as properties of your controller
- Classes are instantiated where needed, and components are managed by
Services
- The class loader automatically handles PSR4 style class locating, within the
App
(application) andCodeIgniter
(i.e. system) top level namespaces; with composer autoloading support, and even using educated guessing to find your models and libraries if they are in the right folder even though not namespaced - You can configure the class loading to support whatever application structure you are most comfortable with, including the "HMVC" style
Controllers
- Controllers extend CodeIgniterController instead of CI_Controller
- They don't use a constructor any more (to invoke CI "magic") unless that is part of a base controller you make
- CI provides
Request
andResponse
objects for you to work with - more powerful than the CI3-way - If you want a base controller (MY_Controller in CI3), make it where you like, e.g. BaseController extends Controller, and then have your controllers extend it
Models
- Models extend CodeIgniterModel instead of CI_Model
- The CI4 model has much more functionality, including automatic database connection, basic CRUD, in-model validation, and automatic pagination
- CI4 also has the
Entity
class you can build on, for richer data mapping to your database tables - Instead of CI3's
$this->load->model(x);
, you would now use$this->x = new X();
, following namespaced conventions for your component
Views
- Your views look much like before, but they are invoked differently ... instead of CI3's
$this->load->view(x);
you can useecho view(x);
- CI4 supports view "cells", to build your response in pieces
- The template parser is still there, but substantially enhanced
Libraries
- Your app classes can still go inside
application\Libraries
, but they don't have to - Instead of CI3's
$this->load->library(x);
you can now use$this->x = new X();
, following namespaced conventions for your component
Helpers
- Helpers are pretty much the same as before, though some have been simplified
Extending the framework
- You don't need a
core
folder to holdMY_...
framework component extensions or replacements - You don't need
MY_x
classes inside your libraries folder to extend or replace CI4 pieces - Make any such classes where you like, and add appropriate service methods in
application/Config/Services.php
to load your components instead of the default ones
[codeigniter4]Upgrading from 3.x to 4.x的更多相关文章
- VS2013: upgrading a Windows Phone 7/8 and Windows 8 apps(转)
VS2013: upgrading a Windows Phone 7/8 and Windows 8 apps September 17, 2013Windows 8, Windows PhoneJ ...
- Installation and Upgrading
Cumulative Feature Overview Identifies product features available to you when upgrading. This tool r ...
- Upgrading or Redeploying SharePoint 2010 Workflows
While creating several State Machine SharePoint 2010 workflows using visual studio for a client I ha ...
- Upgrading Applications
Upgrading Applications If you have an existing Zend Framework v2 application, and want to update it ...
- Pycharm 中You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
今天运行程序的时候出现了: You are using pip version 10.0.1, however version 18.1 is available.You should conside ...
- AIM Tech Round 4 (Div. 1) C - Upgrading Tree 构造 + 树的重心
C - Upgrading Tree 我发现我构造题好弱啊啊啊. 很明显能想到先找到重心, 然后我们的目标就是把所有点接到重心的儿子上,让重心的儿子子树变成菊花图, 这个先把重心到儿子的边连到 i , ...
- [转]Upgrading to Async with Entity Framework, MVC, OData AsyncEntitySetController, Kendo UI, Glimpse & Generic Unit of Work Repository Framework v2.0
本文转自:http://www.tuicool.com/articles/BBVr6z Thanks to everyone for allowing us to give back to the . ...
- Upgrading Elasticsearch
Upgrading Elasticsearch | Elasticsearch Reference [5.6] | Elastic https://www.elastic.co/guide/en/el ...
- 官方文档 Upgrading Elasticsearch
Upgrading Elasticsearch Before upgrading Elasticsearch: Consult the breaking changes docs. Use the E ...
随机推荐
- cjson库的移植和使用
cjson 下载链接 https://github.com/DaveGamble/cJSON 下载完成将其中的cJson.c cJson.h复制到自己的项目中引用即可: 1.字符串转json格式 cJ ...
- node post 大数据无响应超时
使用 express 框架,post 较大数据量(富文本,里面包含了图片base64数据,大约300k)时,node 无响应,把数据内容减少后能顺利提交. 是因为数据量大过body post 的限制导 ...
- bootstrap234的ie兼容选择
如果你需要兼容IE8甚至是IE7和IE6,那么只能选择Bootstrap2,虽然它自身在IE6的效果也并不完美.如果需要兼容IE678的话用2.如果需要高版本的浏览器,并且移动端优先的话,那么用boo ...
- 《Javascript DOM编程艺术》学习笔记 第1-6章
第1章 Javascript简史 Javascript是Netspace公司与Sun公司合作开发的,Javascript 1.0版于1995年推出. 为与微软公司竞争,Netspace公司和Sun公司 ...
- sqlserver with 递归用法
DECLARE @companyid TABLE ( [Id] [int] ); with cte as( union all select a.Id from [base].[Company] a, ...
- windows的系统变量
在Windows cmd小黑框里输入set命令,可以查看现有的系统变量 “="前的部分就是变量名. %USERPROFILE% =C:\Users\用户名 %SystemRoot% =C:\ ...
- 使用 Express 脚手架
安装: npm install -g express-generator 创建项目: express myapp 安装依赖 install dependencies: > npm install ...
- Java连载75-StringBuffer和StringBuilder
一.StringBuffer和StringBuilder 1.StringBuffer是什么? 答:是一个字符串缓冲区,工作原理:预先在内存中申请一块空间以容纳字符序列,如果预留的空间,则进行自动扩容 ...
- 将IMAGE转为PDF后上传
using iTextSharp.text; using iTextSharp.text.pdf; /// <summary> /// 将IMAGE转为PDF后上传 /// </su ...
- C语言->关于文件数据的录入和输出调用的函数总结
数据输入输出对象之间的关系图: 函数使用说明: 1.一个字符的输入\输出,对象是键盘(缓存和屏幕) 1.1.getchar(a),putchar(a); 1.2.scanf(“%d”,&i), ...