动态

详情 返回 返回

PHP輕量級、超簡單、入門級、易上手的框架:CodeIgniter - 动态 详情

摘要

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

user avatar alibabawenyujishu 头像 freeman_tian 头像 damonxiaozhi 头像 libubai 头像 joe235 头像 gaozhipeng 头像 heath_learning 头像 daishuyunshuzhanqianduan 头像 zxl20070701 头像 defghy 头像 yunpan-plus 头像 headofhouchang 头像
点赞 33 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.