3
头图

摘要

CodeIgniter 3 是一个轻量级的 PHP Web 应用程序开发框架,专注于简单性和性能。它提供了一系列的库和工具,帮助开发者快速构建各种规模的 Web 应用程序。

简单易用:CodeIgniter 设计简洁,学习曲线低,使得开发者可以快速上手并开始构建应用程序。

MVC 架构:CodeIgniter 遵循 MVC(Model-View-Controller)设计模式,将应用程序的逻辑、数据和呈现逻辑分离,提高了代码的可维护性和可扩展性。

轻量级:CodeIgniter 的核心库非常精简,没有复杂的依赖关系,使得框架的体积非常小,运行速度非常快。

安装

CodeIgniter-3.1.5: https://likeyun.lanzout.com/i2Bk51sak7gd

下载解压后放在你的网站目录中,我是在根目录下。

配置

Ci框架的所有操作均在 application 目录下,我们需要进行简单的配置。打开 application/config/config.php

$config['base_url'] = '你的网站地址';

我是写成了自动获取,你可以直接填写网址上去,例如:

$config['base_url'] = 'https://www.qq.com/';

image.png

SESSION保存位置

config['sess_save_path'] = APPPATH . 'sessions/';

image.png

日志保存位置

$config['log_path'] = APPPATH . 'logs/';

image.png

打开 application/config/database.php 配置数据库信息。

image.png

我这里自己建了一个用户信息表来进行学习。

表结构如下:

--
-- 表的结构 `users`
--

CREATE TABLE `users` (
  `id` int(10) NOT NULL,
  `name` varchar(32) NOT NULL,
  `age` int(3) DEFAULT NULL,
  `city` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

你可以直接执行这个SQL创建跟我一样的表。

使用框架

以上配置完成,我们就可以编写一个简单的例子来使用这个框架,让我们的应用程序跑起来!

在Ci框架中,一个URL路径如下:

https://域名/index.php/welcome/index

index.php 是 CodeIgniter 默认的入口文件。
welcome 表示控制器的名称,这里是 Welcome 控制器。
index 表示控制器中的一个方法名,这里是 index 方法。

最后将结果传给视图进行渲染。

$this->load->view('welcome_message');

welcome_message 是视图文件名。

application/views 目录里有一个 welcome_message.php 就是视图文件。这就完成了一个最简单的MVC框架的运行过程,但是这个过程暂时还没用上M,即 Model,下面会用上。

控制器(Controller)与模型(Model)

创建用户

现在编写一个 Users.php 控制器,演示控制器是如何使用的。

application/controllers 里创建一个 Users.php 作为用户相关的控制器。

<?php

    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Users extends CI_Controller {
        
        // 添加用户
        public function add_user($name = null, $age = null, $city = null) {
            
            // 检查是否传递了参数
            if ($name === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:用户名称';
                return; // 结束方法
            }
            if ($age === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:年龄';
                return; // 结束方法
            }
            if ($city === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:城市';
                return; // 结束方法
            }
    
            // 从请求中获取用户数据
            $user_data = array(
                'name' => $name,
                'age' => $age,
                'city' => urldecode($city) // 中文在Url中传过来的已经被编码,这需要解码再插入数据库
            );
    
            // 加载用户模型
            $this->load->model('user_model');
    
            // 调用模型方法执行添加用户操作
            $user_id = $this->user_model->add_user($user_data);

            echo '用户创建成功,ID:' . $user_id;
        }
    }

application/models 里创建一个 User_model.php 作为用户操作的模型,里面涉及到数据库的增删改查操作。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        // 加载数据库
        $this->load->database();
    }

    // 添加用户
    public function add_user($user_data) {
        
        // 执行添加用户的操作
        $this->db->insert('users', $user_data);
        
        // 返回插入的用户ID
        return $this->db->insert_id();
    }
}

在这个例子中。访问的URL应该如下:

https://域名/index.php/users/add_user/KING/18/北京

解释:调用 users 控制器的 add_user 方法,而 add_user 方法向 User_model 模型的 add_user 方法传递了一个数组 $user_data,数组有3个参数,分别是 $name、$age、$city,在URL中,KING/18/北京 就是这三个参数的传递,这三个参数由 users 控制器接收,然后调用模型进行创建用户。

获取用户

跟上面一样,都是在 User.php 控制器和 User_model.php 模型中实现获取用户的操作。

User.php 控制器

<?php

    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Users extends CI_Controller {
        
        // 添加用户
        // ...........
        // 这里忽略代码

        // 获取用户
        public function getUsers()
        {
            // 加载用户模型
            $this->load->model('user_model');
            
            // 获取用户数据
            $data['users'] = $this->user_model->get_users();
            
            // 加载视图并将数据传递给视图
            $this->load->view('user_list', $data);
        }
    }

User_model.php 模型

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        // 加载数据库
        $this->load->database();
    }

    // 添加用户
    // ...........
    // 这里忽略代码

    // 获取用户
    public function get_users(){
        
        // 执行获取用户的操作
        $query = $this->db->get('users');
        return $query->result_array();
    }
}

user_list.php 视图

<!-- user_list.php -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li>
                <?php echo $user['name']; ?> - 
                <?php echo $user['age']; ?> - 
                <?php echo $user['city']; ?>
            </li>
        <?php endforeach; ?>
    </ul>
</body>
</html>
https://域名/index.php/users/getUsers

通过 User.php 控制器的 getUsers() 方法调用了 user_model 模型的 get_users() 方法获取到用户列表,然后渲染到 user_list 视图。

删除用户

控制器:

<?php

    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Users extends CI_Controller {
        
        // 添加用户
        // ...........
        // 这里忽略代码

        // 获取用户
        // ...........
        // 这里忽略代码

        // 删除用户
        public function delete_user($user_id = null) {
        
            // 检查是否传递了参数
            if ($user_id === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:用户id';
                return; // 结束方法
            }
            
            // 加载用户模型
            $this->load->model('user_model');

            // 调用模型方法执行删除用户操作
            $result = $this->user_model->delete_user($user_id);
            
            // 验证结果
            if ($result === true) {

                // 用户删除成功
                echo '用户删除成功';
            } else {

                // 用户删除失败,这里会根据model返回的结果显示错误消息
                echo $result;
            }
        }
    }

模型:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        // 加载数据库
        $this->load->database();
    }

    // 添加用户
    // ...........
    // 这里忽略代码

    // 获取用户
    // ...........
    // 这里忽略代码

    // 删除用户
    public function delete_user($user_id) {
        
        // 执行删除用户的操作
        $this->db->where('id', $user_id);
        $this->db->delete('users');

        // 检查是否有错误发生
        $error = $this->db->error();
        if ($error['code'] !== 0) {
            
            // 获取数据库错误信息
            $error_msg = '数据库错误:' . $error['message'];
            
            // 返回错误信息
            return $error_msg;
        }

        // 检查删除操作是否成功
        if ($this->db->affected_rows() > 0) {
            
            // 用户删除成功
            return true;
        } else {
            
            // 用户删除失败,返回错误信息
            return '删除用户失败:用户不存在或删除操作失败。';
        }
    }
}

执行(删除用户id=9的用户)

https://域名/index.php/users/delete_user/9
修改用户信息

控制器:

<?php

    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Users extends CI_Controller {
        
        // 添加用户
        // ...........
        // 这里忽略代码

        // 获取用户
        // ...........
        // 这里忽略代码

        // 删除用户
        // ...........
        // 这里忽略代码
        
        // 修改用户信息
        public function update_user($user_id = null, $city = null) {
            
            // 检查是否传递了参数
            if ($user_id === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:用户id';
                return; // 结束方法
            }
            
            // 检查是否传递了参数
            if ($city === null) {
                
                // 显示自定义的错误信息
                echo '缺少参数:城市名称';
                return; // 结束方法
            }
            
            // 从URL请求中获取参数
            $user_data = array(
                'city' => urldecode($city), // 这里要解码再插入数据库,不然在数据库显示的是被编码的中文
            );

            // 加载用户模型
            $this->load->model('user_model');

            // 调用模型方法执行更新用户信息操作
            $result = $this->user_model->update_user($user_id, $user_data);
            
            // 验证结果
            if ($result === true) {
                
                // 用户信息更新成功
                echo '用户信息更新成功';
            } else {
                
                // 用户信息更新失败,这里会根据model返回的结果显示错误消息
                echo $result;
            }
        }
    }

模型:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        // 加载数据库
        $this->load->database();
    }

    // 添加用户
    // ...........
    // 这里忽略代码

    // 获取用户
    // ...........
    // 这里忽略代码

    // 删除用户
    // ...........
    // 这里忽略代码
    
    // 修改用户信息
    public function update_user($user_id, $user_data) {
        
        // 更新用户信息
        $this->db->where('id', $user_id);
        $this->db->update('users', $user_data);

        // 检查是否有错误发生
        $error = $this->db->error();
        if ($error['code'] !== 0) {
            
            // 获取数据库错误信息
            $error_msg = '数据库错误:' . $error['message'];
            
            // 返回错误信息
            return $error_msg;
        }

        // 检查更新操作是否成功
        if ($this->db->affected_rows() > 0) {
            
            // 用户信息更新成功
            return true;
        } else {
            
            // 用户信息更新失败,返回错误信息
            return '更新用户信息失败:用户不存在或没有修改任何信息。';
        }
    }
}

执行(修改用户id=15的城市为香港)

https://域名/index.php/users/update_user/15/香港

会话管理

在PHP中,SESSION是比较方便的会话管理方法,Ci框架提供了非常方便的SESSION会话管理。

首先要加载session库:

$this->load->library('session');

假设我要验证用户是否登录,如果已登录,才允许进行增删改查,否则跳转到登录界面或者返回未登录的提示。

控制器:

<?php

    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Users extends CI_Controller {

        public function __construct() {
            parent::__construct();
            $this->load->library('session');
        }

        // 验证用户是否已登录
        private function check_login() {
            if (!$this->session->userdata('user_id')) {

                echo '你还没登录';
                exit;
            }
        }
        
        // 添加用户
        public function add_user() {

            // 验证用户是否已登录
            $this->check_login();

            // 添加用户的逻辑、模型调用等
            // 忽略代码....
        }

        // 获取用户
        public function getUsers() {

            // 验证用户是否已登录
            $this->check_login();

            // 获取用户的逻辑、模型调用等
            // 忽略代码....
        }

        // 删除用户
        public function delete_user($user_id = null) {

            // 验证用户是否已登录
            $this->check_login();

            // 删除用户的逻辑、模型调用等
            // 忽略代码....
        }
        
        // 修改用户信息
        public function update_user($user_id = null, $city = null) {

            // 验证用户是否已登录
            $this->check_login();

            // 修改用户的逻辑、模型调用等
            // 忽略代码.... 
        }
    }

简而言之,就是在之前的增删改查方法前加入了会话管理的验证。

设置会话

这样就可以显示登录了。

// 设置会话数据
$this->session->set_userdata('user_id', 'TANKING');

结语

通过学习 CodeIgniter 框架,您已经掌握了一套强大的工具,可以帮助您快速构建各种类型的 Web 应用程序。在这个过程中,您学习了如何设置环境、安装框架、创建控制器和视图、使用模型、配置路由、处理表单验证、管理会话和记录日志等重要技能。

CodeIgniter 是一个简单、灵活、轻量级的框架,它提供了丰富的功能和工具,使得开发 Web 应用程序变得更加容易和高效。通过不断练习和探索,您将能够更加熟练地利用 CodeIgniter 构建各种规模和类型的应用程序。

作者

TANKING


TANKING
4.8k 声望509 粉丝

热爱分享,热爱创作,热爱研究。