CodeIgniter 完整教程:从入门到精通
目录
-
(图片来源网络,侵删)- 什么是 CodeIgniter?
- 为什么选择 CodeIgniter?(优点)
- 环境要求
- 安装 CodeIgniter
- 配置与验证
-
- 什么是 MVC?
- CodeIgniter 中的 MVC
- 你的第一个 CodeIgniter 应用:Hello, World!
-
- URL 路由
- 控制器
- 模型
- 视图
- 超级对象 与辅助函数
-
- 配置数据库
- 查询构建器
- 模型 与数据库
- 结果集处理
-
(图片来源网络,侵删)- 创建表单
- 接收表单数据
- 表单验证库
-
- 会话 管理
- 文件上传
- 类库 的创建与使用
- 错误处理与调试
-
- 代码组织
- 安全性
- 性能优化
- 项目部署
第一部分:CodeIgniter 简介与环境搭建
什么是 CodeIgniter?
CodeIgniter (简称 CI) 是一个轻量级、高性能的 PHP MVC 框架,它旨在为 PHP 开发者提供一个简单、优雅的方式来创建功能丰富的 Web 应用程序,它的核心理念是“简单”和“灵活”。

为什么选择 CodeIgniter?(优点)
- 轻量级:核心系统非常小,加载速度快,对服务器资源消耗低。
- 简单易学:文档清晰,API 设计直观,没有复杂的配置,新手可以快速上手。
- 文档完善:拥有官方文档和大量社区资源。
- 高度灵活:你不需要严格遵循框架的约定,可以根据项目需求自由组织代码。
- MVC 架构:强制分离业务逻辑、数据和表现,使代码更易于维护和扩展。
- 强大的查询构建器:让你用面向对象的方式编写安全的数据库查询,避免 SQL 注入。
- 丰富的扩展库:自带了常用的库(如 Session、Email、Image Manipulation 等),也可以轻松自定义。
环境要求
- PHP 7.2 或更高版本 (推荐 PHP 7.4 或 8.x)
- Web 服务器 (如 Apache 2.4+ 或 Nginx)
- 数据库 (如 MySQL 5.6+ 或 MariaDB)
提示:对于初学者,强烈推荐使用集成的 PHP 开发环境,如 XAMPP、WAMP (Windows) 或 MAMP (macOS),它们可以一键安装所有所需组件。
安装 CodeIgniter
安装 CodeIgniter 非常简单,主要有两种方式:
-
从官网下载安装
- 访问 CodeIgniter 官网。
- 点击 "Download" 获取最新稳定版。
- 下载后,解压压缩包。
- 将整个
CodeIgniter-<version>文件夹内的内容通过 FTP 或其他方式上传到你 Web 服务器的根目录(htdocs、www)。
-
使用 Composer 安装 (推荐)
- 确保你的系统已安装 Composer。
- 在你的项目目录下,打开终端或命令行,运行:
composer create-project codeigniter4/appstarter my_project
- 这将创建一个名为
my_project的新目录,并下载最新版本的 CodeIgniter 4 及其所有依赖。 - 进入
my_project目录,然后启动 PHP 内置服务器进行测试:cd my_project php spark serve
- 在浏览器中访问
http://localhost:8080。
配置与验证
-
基本配置: 打开
application/config/config.php文件,你可以进行一些基本设置,$config['base_url'] = 'http://yourwebsite.com/';// 设置你的网站基础 URL$config['index_page'] = 'index.php';// 是否在 URL 中隐藏index.php
-
数据库配置: 打开
application/config/database.php文件,配置你的数据库连接信息:$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'your_db_username', 'password' => 'your_db_password', 'database' => 'your_db_name', 'dbdriver' => 'mysqli', // ... ); -
验证安装: 在浏览器中访问你的网站地址(
http://localhost/your_project_folder),如果看到 CodeIgniter 的欢迎页面,说明安装成功!
第二部分:MVC 架构初探
什么是 MVC?
MVC 是一种软件设计模式,将应用程序分为三个核心部分:
- Model (模型):负责与数据库交互,处理业务逻辑和数据,它不知道数据最终如何展示。
- View (视图):负责显示数据,是用户看到的前端界面,它只包含 HTML 和一些简单的展示逻辑。
- Controller (控制器):是 Model 和 View 之间的协调者,它接收用户请求,调用相应的 Model 获取数据,然后将数据传递给 View 进行渲染。
CodeIgniter 中的 MVC
CodeIgniter 完美地实现了 MVC 模式,文件结构清晰:
- 控制器:位于
application/controllers/目录下。 - 模型:位于
application/models/目录下。 - 视图:位于
application/views/目录下。
你的第一个 CodeIgniter 应用:Hello, World!
让我们创建一个简单的页面,在浏览器中显示 "Hello, World!"。
-
创建控制器 在
application/controllers/目录下,创建一个名为Welcome.php的文件,文件名必须首字母大写。<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { // $this->load->view('welcome_message'); echo "Hello, World!"; } }defined('BASEPATH') ...:这是 CodeIgniter 的安全检查,防止直接访问 PHP 文件。class Welcome extends CI_Controller:创建一个Welcome类,并继承自框架的核心CI_Controller类。public function index():这是默认执行的方法,当你访问控制器但不指定方法时,就会调用index方法。
-
访问你的页面 在浏览器中访问
http://localhost/your_project_folder/index.php/welcome,你应该能看到 "Hello, World!"。 -
使用视图 更规范的做法是使用视图来显示内容。
-
修改控制器 (
application/controllers/Welcome.php)public function index() { $data['title'] = "首页"; $data['message'] = "Hello, World!"; $this->load->view('hello_view', $data); } -
创建视图 (
application/views/hello_view.php)<!DOCTYPE html> <html> <head> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $message; ?></h1> </body> </html>
再次访问
http://localhost/your_project_folder/index.php/welcome,你会看到一个完整的 HTML 页面。 -
第三部分:核心概念深入
URL 路由
CodeIgniter 的 URL 结构通常是 index.php/class/function/ID。
class:对应控制器的名称。function:对应控制器中的方法名。ID:传递给方法的参数。
在 News.php 控制器中有一个 view 方法:
http://localhost/index.php/news/view/45 会调用 News 控制器的 view('45') 方法。
你可以在 application/config/routes.php 中自定义 URL 规则。
控制器
控制器是应用的入口,除了处理请求,它还负责:
- 加载库和辅助函数:
$this->load->library('session'); - 调用模型:
$this->load->model('user_model'); $users = $this->user_model->get_users(); - 传递数据给视图:
$this->load->view('user_list', $data);
模型
模型专门用于数据操作。
- 创建模型:在
application/models/下创建文件,如User_model.php。<?php class User_model extends CI_Model { public function get_users() { $query = $this->db->get('users'); return $query->result(); } } - 使用模型:在控制器中加载并调用它。
$this->load->model('User_model'); $data['users'] = $this->User_model->get_users();
视图
视图是展示层,它接收从控制器传递来的 $data 数组,并可以像使用变量一样使用它们。
$data['name']在视图中就是$name。- 你可以在视图中循环数组:
<?php foreach ($users as $user): ?> <p><?php echo $user->name; ?></p> <?php endforeach; ?>
超级对象 与辅助函数
- 超级对象:当你创建一个控制器时,
$this对象就包含了 CodeIgniter 的核心对象,如load,input,session,db等,你不需要手动创建它们,直接通过$this即可调用。 - 辅助函数:提供一系列独立的、全局可用的函数,帮助你完成常见任务。
- 加载辅助函数:
$this->load->helper('url'); - 常用辅助函数:
site_url('controller/method'):生成完整的 URL。base_url():生成网站的基础 URL。form_open('controller/method'):生成一个安全的表单标签。set_value('input_name'):在表单中回显上次输入的值。
- 加载辅助函数:
第四部分:数据库交互
配置数据库
如第一部分所述,在 application/config/database.php 中配置好你的数据库连接信息。
查询构建器
这是 CodeIgniter 推荐的数据库操作方式,它通过链式调用方法来构建 SQL 查询,安全且高效。
// 加载数据库对象 (通常在控制器构造函数中自动加载)
// $this->load->database();
// 1. 获取所有记录
$query = $this->db->get('my_table');
foreach ($query->result() as $row) {
echo $row->title;
}
// 2. 条件查询
$this->db->select('title, content');
$this->db->from('articles');
$this->db->where('category_id', 1);
$this->db->where('status', 'published');
$query = $this->db->get();
// 等效于: SELECT title, content FROM articles WHERE category_id = 1 AND status = 'published'
// 3. 插入数据
$data = array( => 'My Awesome Post',
'author' => 'John Doe',
'date' => date('Y-m-d H:i:s')
);
$this->db->insert('articles', $data);
// 4. 更新数据
$data = array( => 'An Even More Awesome Post'
);
$this->db->where('id', 42);
$this->db->update('articles', $data);
// 5. 删除数据
$this->db->where('id', 42);
$this->db->delete('articles');
模型 与数据库
最佳实践是将数据库操作封装在模型中。
-
模型 (
application/models/Article_model.php)class Article_model extends CI_Model { public function get_published_articles() { $this->db->where('status', 'published'); $query = $this->db->get('articles'); return $query->result(); } } -
控制器
$this->load->model('Article_model'); $data['articles'] = $this->Article_model->get_published_articles(); $this->load->view('article_list', $data);
结果集处理
查询构建器的方法返回不同的结果集格式:
result():返回一个包含多个对象的数组。$row->titleresult_array():返回一个包含多个关联数组的数组。$row['title']row():返回单个对象。row_array():返回单个关联数组。
第五部分:表单处理与验证
创建表单
在视图中使用 form 辅助函数来创建表单。
<!-- application/views/create_user.php -->
<?php $this->load->helper('form'); ?>
<?php echo form_open('user/create'); ?>
<label for="username">Username:</label>
<input type="text" name="username" id="username" value="<?php echo set_value('username'); ?>" size="50" />
<?php echo form_error('username', '<div class="error">', '</div>'); ?>
<label for="email">Email:</label>
<input type="email" name="email" id="email" value="<?php echo set_value('email'); ?>" size="50" />
<?php echo form_error('email', '<div class="error">', '</div>'); ?>
<input type="submit" name="submit" value="Create User" />
<?php echo form_close(); ?>
form_open('user/create'):生成一个指向user控制器的create方法的表单。set_value('username'):如果表单提交失败并返回,此函数会保留用户之前输入的值。form_error('username'):如果验证失败,这里会显示错误信息。
接收表单数据
在控制器中,使用 input 库来获取 POST 数据。
// application/controllers/User.php
class User extends CI_Controller {
public function create() {
if ($this->input->post()) {
// 表单已提交
$username = $this->input->post('username');
$email = $this->input->post('email');
// ... 处理数据 ...
echo "Username: " . $username . "<br>";
echo "Email: " . $email;
} else {
// 显示表单
$this->load->view('create_user');
}
}
}
表单验证库
CodeIgniter 有一个强大的表单验证库,可以在控制器中进行集中配置。
// application/controllers/User.php
class User extends CI_Controller {
public function create() {
$this->load->library('form_validation');
// 设置验证规则
$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]');
if ($this->form_validation->run() == FALSE) {
// 验证失败,重新显示表单
$this->load->view('create_user');
} else {
// 验证成功,处理数据
$this->User_model->create_user();
$this->load->view('success_view');
}
}
}
set_rules('field_name', 'Human Name', 'rule1|rule2|...'):设置字段的验证规则。required:必填。min_length[5]:最小长度。valid_email:有效的邮箱格式。is_unique[table.field]:检查数据库中是否已存在该值。matches[password]:与另一个字段匹配(确认密码)。run():运行验证,返回true或false。
第六部分:进阶主题
会话 管理
CodeIgniter 的会话库非常强大,支持数据存储在服务器端,并通过 Cookie 传递会话 ID。
// 在控制器中
$this->load->library('session');
// 设置会话数据
$this->session->set_userdata('username', 'johndoe');
$this->session->set_userdata(array(
'email' => 'john@example.com',
'logged_in' => TRUE
));
// 获取会话数据
$username = $this->session->userdata('username');
// 删除会话数据
$this->session->unset_userdata('username');
// 销毁整个会话
$this->session->sess_destroy();
文件上传
使用文件上传库可以轻松处理文件上传。
// 在控制器中
$this->load->library('upload');
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->upload->initialize($config);
if ( ! $this->upload->do_upload('userfile')) {
// 上传失败,显示错误
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
} else {
// 上传成功
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
userfile是<input type="file" name="userfile">的name属性。
类库 的创建与使用
除了使用框架自带的库,你还可以创建自己的类库。
-
创建类库:在
application/libraries/目录下创建MY_Mycustom.php(前缀MY_可在config.php中配置)。<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class MY_Mycustom { public function say_hello() { return "Hello from my custom library!"; } } -
使用类库:在控制器中加载并使用。
$this->load->library('mycustom'); echo $this->mycustom->say_hello();
错误处理与调试
- 显示错误:在开发环境中,打开
application/config/config.php,设置:$config['log_threshold'] = 1; // 1: Error, 2: Debug, 3: Info, 4: All $config['log_path'] = APPPATH . 'logs/';
框架会自动记录错误和调试信息到日志文件中。
- 使用
show_error()和show_404():在代码中主动抛出错误或 404 页面。
第七部分:最佳实践与项目部署
代码组织
- 使用 HMVC:对于大型项目,可以考虑使用 HMVC (Hierarchical MVC) 插件,将应用分解成多个模块,每个模块都有自己的 MVC,提高代码复用性和可维护性。
- 遵循命名规范:类名、文件名使用大驼峰式,方法和变量使用小驼峰式或下划线式。
- 注释:为复杂的逻辑和公共方法添加清晰的注释。
安全性
- 防止 XSS (跨站脚本攻击):在输出数据到视图前,使用
html_escape()函数。$this->load->helper('security'); echo html_escape($user_input); - 防止 SQL 注入:始终使用查询构建器或参数化查询,不要直接拼接 SQL 语句。
- CSRF 保护:在表单中启用 CSRF 令牌,在
application/config/config.php中设置$config['csrf_protection'] = TRUE;。form_open()会自动生成隐藏的 CSRF 字段。
性能优化
- 缓存:利用 CodeIgniter 的缓存功能缓存页面片段或整个页面,减少数据库查询。
- 压缩输出:在
application/config/config.php中启用$config['compress_output'] = TRUE;,可以减小传输文件大小。 - 避免不必要的加载:只在需要的时候加载库、辅助函数和模型。
项目部署
- 设置环境:在
application/config/config.php中,根据环境(开发、测试、生产)设置不同的$config['base_url']。 - 关闭调试模式:在生产环境中,确保
$config['log_threshold']设置为较低的值(如 1 或 0),以避免泄露敏感信息。 - 设置文件权限:确保
application/cache/和application/logs/目录有写入权限。 - 隐藏
index.php:这是提升 URL 美观度和 SEO 的关键步骤。- Apache:确保开启了
mod_rewrite模块,在项目根目录下创建一个.htaccess文件,内容如下:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] - Nginx:在你的 Nginx 配置文件中添加以下规则:
location / { try_files $uri $uri/ /index.php?$query_string; }
- Apache:确保开启了
总结与资源
CodeIgniter 是一个学习曲线平缓、功能强大的 PHP 框架,它让你能快速搭建项目,同时又不会给你太多的束缚,掌握其 MVC 思想和核心组件,你就能高效地开发出健壮的 Web 应用。
官方资源
- CodeIgniter 4 官方文档:最权威、最全面的参考资料。
- CodeIgniter 3 官方文档:如果你仍在使用 CI 3,这里是它的文档。
- CodeIgniter 论坛:获取社区帮助的最佳场所。
推荐学习路径
- 通读官方文档:特别是“通用概念”和“库”部分。
- 跟着教程动手实践:不要只看不练,亲手创建几个小项目。
- 阅读开源项目:在 GitHub 上找一些用 CodeIgniter 开发的项目,学习别人的代码风格和架构。
- 探索扩展:CodeIgniter 社区有很多优秀的第三方库和插件,可以大大提高开发效率。
祝你学习愉快!
