CodeIgniter 参数如何正确配置与使用?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 参数 正文

URL 路由参数

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

codeigniter 参数
(图片来源网络,侵删)

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 方法的第二个参数。

控制器代码:

codeigniter 参数
(图片来源网络,侵删)
<?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) 按函数定义传递

最佳实践:

  1. 不要信任外部输入: 对所有通过 URL 或表单接收的参数(如 $id, $slug)进行验证和净化,防止 SQL 注入和 XSS 攻击,可以使用 Form Validation 库。
  2. 使用配置文件: 将数据库连接、API 密钥、网站名称等硬编码的值移到配置文件中,方便管理和在不同环境(开发、测试、生产)间切换。
  3. 保持 URL 简洁: 尽量使用有意义的 URL 段参数,并遵循 RESTful 风格。
  4. 使用路由: 对于复杂的 URL,可以在 application/config/routes.php 中定义自定义路由,使 URL 更友好、更规范,同时隐藏实际的控制器和方法名。

希望这个全面的解释能帮助你更好地理解和使用 CodeIgniter 中的各种参数!

-- 展开阅读全文 --
头像
智能手机屏幕怎么校准才准确?
« 上一篇 今天
宏碁Aspire 4741G拆机步骤有哪些?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]