贝博恩创新科技网

CodeIgniter教程如何快速入门?

CodeIgniter 完整教程:从入门到精通

目录

  1. 第一部分:CodeIgniter 简介与环境搭建

    CodeIgniter教程如何快速入门?-图1
    (图片来源网络,侵删)
    • 什么是 CodeIgniter?
    • 为什么选择 CodeIgniter?(优点)
    • 环境要求
    • 安装 CodeIgniter
    • 配置与验证
  2. 第二部分:MVC 架构初探

    • 什么是 MVC?
    • CodeIgniter 中的 MVC
    • 你的第一个 CodeIgniter 应用:Hello, World!
  3. 第三部分:核心概念深入

    • URL 路由
    • 控制器
    • 模型
    • 视图
    • 超级对象 与辅助函数
  4. 第四部分:数据库交互

    • 配置数据库
    • 查询构建器
    • 模型 与数据库
    • 结果集处理
  5. 第五部分:表单处理与验证

    CodeIgniter教程如何快速入门?-图2
    (图片来源网络,侵删)
    • 创建表单
    • 接收表单数据
    • 表单验证库
  6. 第六部分:进阶主题

    • 会话 管理
    • 文件上传
    • 类库 的创建与使用
    • 错误处理与调试
  7. 第七部分:最佳实践与项目部署

    • 代码组织
    • 安全性
    • 性能优化
    • 项目部署
  8. 总结与资源


第一部分:CodeIgniter 简介与环境搭建

什么是 CodeIgniter?

CodeIgniter (简称 CI) 是一个轻量级、高性能的 PHP MVC 框架,它旨在为 PHP 开发者提供一个简单、优雅的方式来创建功能丰富的 Web 应用程序,它的核心理念是“简单”和“灵活”。

CodeIgniter教程如何快速入门?-图3
(图片来源网络,侵删)

为什么选择 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 开发环境,如 XAMPPWAMP (Windows) 或 MAMP (macOS),它们可以一键安装所有所需组件。

安装 CodeIgniter

安装 CodeIgniter 非常简单,主要有两种方式:

  1. 从官网下载安装

    • 访问 CodeIgniter 官网
    • 点击 "Download" 获取最新稳定版。
    • 下载后,解压压缩包。
    • 将整个 CodeIgniter-<version> 文件夹内的内容通过 FTP 或其他方式上传到你 Web 服务器的根目录(htdocswww)。
  2. 使用 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

配置与验证

  1. 基本配置: 打开 application/config/config.php 文件,你可以进行一些基本设置,

    • $config['base_url'] = 'http://yourwebsite.com/'; // 设置你的网站基础 URL
    • $config['index_page'] = 'index.php'; // 是否在 URL 中隐藏 index.php
  2. 数据库配置: 打开 application/config/database.php 文件,配置你的数据库连接信息:

    $db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'your_db_username',
        'password' => 'your_db_password',
        'database' => 'your_db_name',
        'dbdriver' => 'mysqli',
        // ...
    );
  3. 验证安装: 在浏览器中访问你的网站地址(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!"。

  1. 创建控制器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 方法。
  2. 访问你的页面 在浏览器中访问 http://localhost/your_project_folder/index.php/welcome,你应该能看到 "Hello, World!"。

  3. 使用视图 更规范的做法是使用视图来显示内容。

    • 修改控制器 (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->title
  • result_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():运行验证,返回 truefalse

第六部分:进阶主题

会话 管理

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 属性。

类库 的创建与使用

除了使用框架自带的库,你还可以创建自己的类库。

  1. 创建类库:在 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!";
        }
    }
  2. 使用类库:在控制器中加载并使用。

    $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;,可以减小传输文件大小。
  • 避免不必要的加载:只在需要的时候加载库、辅助函数和模型。

项目部署

  1. 设置环境:在 application/config/config.php 中,根据环境(开发、测试、生产)设置不同的 $config['base_url']
  2. 关闭调试模式:在生产环境中,确保 $config['log_threshold'] 设置为较低的值(如 1 或 0),以避免泄露敏感信息。
  3. 设置文件权限:确保 application/cache/application/logs/ 目录有写入权限。
  4. 隐藏 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;
      }

总结与资源

CodeIgniter 是一个学习曲线平缓、功能强大的 PHP 框架,它让你能快速搭建项目,同时又不会给你太多的束缚,掌握其 MVC 思想和核心组件,你就能高效地开发出健壮的 Web 应用。

官方资源

推荐学习路径

  1. 通读官方文档:特别是“通用概念”和“库”部分。
  2. 跟着教程动手实践:不要只看不练,亲手创建几个小项目。
  3. 阅读开源项目:在 GitHub 上找一些用 CodeIgniter 开发的项目,学习别人的代码风格和架构。
  4. 探索扩展:CodeIgniter 社区有很多优秀的第三方库和插件,可以大大提高开发效率。

祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇