摘要
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/';
SESSION保存位置
config['sess_save_path'] = APPPATH . 'sessions/';
日誌保存位置
$config['log_path'] = APPPATH . 'logs/';
打開 application/config/database.php 配置數據庫信息。
我這裏自己建了一個用户信息表來進行學習。
表結構如下:
--
-- 表的結構 `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