URL 路由参数
这是最常见、最直观的参数,它通过 URL 传递给控制器方法,用于接收动态数据,如 ID、名称等。

a) URI 段参数
这是 CodeIgniter 默认的参数传递方式,URL 被分割成多个段,每一段都是一个参数。
URL 结构:
http://example.com/class/function/param1/param2/param3/...
示例:
假设你的 URL 是 http://example.com/news/article/123/my-first-article
news是控制器类。article是控制器类中的方法。123是传递给article方法的第一个参数。my-first-article是传递给article方法的第二个参数。
控制器代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class News extends CI_Controller {
public function article($id, $slug)
{
// $id 的值是 "123"
// $slug 的值是 "my-first-article"
echo "文章 ID: " . $id . "<br>";
echo "文章别名: " . $slug;
// 你可以使用这些参数来查询数据库
// $this->db->where('id', $id);
// $query = $this->db->get('articles');
// $article = $query->row();
}
}
b) 可选参数
你可以在方法定义中为参数设置默认值,使其成为可选参数。
示例:
class Products extends CI_Controller {
// URL 中没有提供第二个参数,$category 将默认为 "all"
public function list($category = "all")
{
echo "您正在浏览分类: " . $category;
}
}
访问 http://example.com/products/list 会输出 "您正在浏览分类: all"。
访问 http://example.com/products/list/electronics 会输出 "您正在浏览分类: electronics"。
c) 查询字符串参数
这些是 URL 中 后面的 key=value 对。
URL 结构:
http://example.com/search?query=codeigniter&limit=10
获取方式:
在 CodeIgniter 中,你不能像在原生 PHP 中那样直接使用 $_GET,你需要使用框架提供的辅助函数。
class Search extends CI_Controller {
public function index()
{
// 获取单个参数
$query = $this->input->get('query'); // 值为 "codeigniter"
// 获取所有查询字符串参数,返回一个数组
$get_params = $this->input->get();
// $get_params 的结果是: ['query' => 'codeigniter', 'limit' => '10']
// 如果参数不存在,可以设置默认值,避免报错
$limit = $this->input->get('limit', 20); // 'limit' 不存在,则返回 20
echo "搜索关键词: " . $query;
echo "<br>每页显示数量: " . $limit;
}
}
配置文件参数
CodeIgniter 允许你在配置文件中设置全局参数,这些参数可以在应用的任何地方被调用,这避免了在代码中硬编码值。
配置文件位置:
application/config/ 目录下,config.php, database.php, email.php 等。
示例 (application/config/config.php):
$config['base_url'] = 'http://example.com/'; $config['site_name'] = '我的 awesome 网站'; $config['language'] = 'english'; $config['enable_hooks'] = TRUE;
调用方式:
使用 get_instance() 函数获取 CodeIgniter 的超级对象,然后通过它的 config 对象来读取配置。
class Welcome extends CI_Controller {
public function index()
{
// 获取单个配置项
$site_name = $this->config->item('site_name'); // 值为 "我的 awesome 网站"
// 获取整个配置文件作为一个数组
$config = $this->config->config; // 包含所有配置项的数组
echo "欢迎来到 " . $site_name;
}
}
数据库参数
数据库连接参数通常存储在 application/config/database.php 文件中。
示例 (application/config/database.php):
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'my_database',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
// ... 其他参数
);
调用方式: CodeIgniter 会自动加载默认的数据库连接,你可以在模型或控制器中直接使用它。
class User_model extends CI_Model {
public function get_users()
{
// 框架会自动使用 database.php 中 'default' 组的参数连接数据库
$query = $this->db->get('users');
return $query->result();
}
}
函数/方法参数
这是指在 CodeIgniter 的核心库、辅助函数和第三方类库中,函数或方法所接受的参数。
示例 1: load->view() 的参数
$this->load->view('view_name', $data, $return);
view_name(必需): 视图文件的路径。$data(可选): 一个数组,包含要传递给视图的变量。$return(可选): 如果设为TRUE将被作为字符串返回,而不是直接输出。
$data['title'] = '首页';
$data['heading'] = '欢迎';
// 加载视图,并传递数据
// 第三个参数为 FALSE (默认),所以会直接输出
$this->load->view('templates/header', $data);
$this->load->view('home_page');
$this->load->view('templates/footer');
示例 2: input->post() 的参数
$this->input->post('item_name', TRUE);
item_name(必需): POST 数组中要获取的元素的键名。TRUE(可选): 如果设为TRUE,会对获取到的值进行 XSS (跨站脚本攻击) 过滤。
辅助函数参数
辅助函数是一些简单的独立函数,用于执行特定任务,它们也有自己的参数。
示例: url_helper 中的 site_url()
site_url('news/article/123');
uri_string(可选): 要附加到基础 URL 后面的 URI 字符串。
HMVC 模块参数
如果你使用了 Modular Extensions (HMVC) 插件,参数的概念会更加丰富。
URL 结构:
http://example.com/module_name/controller/method/param1/param2
示例:
http://example.com/blog/posts/show/45
blog: 模块名。posts: 模块中的控制器。show: 控制器中的方法。45: 传递给show方法的参数。
总结与最佳实践
| 参数类型 | 描述 | 示例 | 获取/调用方式 |
|---|---|---|---|
| URL 段参数 | URL 路由中的动态部分 | .../controller/method/123 |
方法函数定义,如 function my_func($id) |
| 查询字符串参数 | URL 后的 key=value 对 |
.../search?query=ci |
$this->input->get('query') |
| 配置参数 | 存储在 config/ 目录下的全局设置 |
$config['base_url'] |
$this->config->item('base_url') |
| 数据库参数 | 数据库连接的凭证和设置 | $db['default']['hostname'] |
自动加载,通过 $this->db 访问 |
| 函数参数 | 框架库和辅助函数的输入 | $this->load->view('view', $data) |
按函数定义传递 |
最佳实践:
- 不要信任外部输入: 对所有通过 URL 或表单接收的参数(如
$id,$slug)进行验证和净化,防止 SQL 注入和 XSS 攻击,可以使用 Form Validation 库。 - 使用配置文件: 将数据库连接、API 密钥、网站名称等硬编码的值移到配置文件中,方便管理和在不同环境(开发、测试、生产)间切换。
- 保持 URL 简洁: 尽量使用有意义的 URL 段参数,并遵循 RESTful 风格。
- 使用路由: 对于复杂的 URL,可以在
application/config/routes.php中定义自定义路由,使 URL 更友好、更规范,同时隐藏实际的控制器和方法名。
希望这个全面的解释能帮助你更好地理解和使用 CodeIgniter 中的各种参数!
