摘要
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。