You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter中为API URI添加.json扩展名?

在CodeIgniter中实现带.json后缀的API URL

嘿,我看你已经在尝试用路由配置来实现.json后缀的URL了,不过现有配置里有个小细节需要调整,另外我还可以给你提供更灵活的方案,让你既能实现单个接口的.json后缀,也能支持全局的接口都用这种格式~

首先修正你现有路由的问题

你写的$route['/data.json'] = "/data/index";里,路由规则开头的斜杠是多余的,CodeIgniter的路由匹配是从URI的第一个分段开始的,不需要加开头的/,正确的写法应该是:

$route['default_controller'] = 'data';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
// 修正后的单个路由配置
$route['data.json'] = 'data/index';

这样访问www.example.com/data.json就会正确映射到data控制器的index方法了。

更灵活的全局.json后缀支持

如果你的API有多个接口,不想一个个写路由,那可以用正则表达式来匹配所有带.json后缀的URI,自动去掉后缀并映射到对应的控制器和方法:

// 匹配 控制器/方法.json 的格式
$route['([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.json'] = '$1/$2';
// 匹配 控制器.json 的格式(默认调用index方法)
$route['([a-zA-Z0-9_-]+)\.json'] = '$1/index';

这样不管是www.example.com/user.json还是www.example.com/user/profile.json,都会分别映射到user/index和user/profile方法。

在控制器中处理JSON响应

当然,光路由映射还不够,你可能需要在控制器里判断当前请求是要返回JSON数据,这里有两种简单的方式:

方式1:通过路由传递格式参数

修改路由,把格式作为参数传给控制器方法:

$route['data.json'] = 'data/index/json';

然后在data控制器的index方法里处理:

public function index($format = '') {
    // 准备要返回的数据
    $response_data = [
        'status' => 'success',
        'data' => ['id' => 1, 'name' => 'Sample Data']
    ];

    if ($format === 'json') {
        // 设置响应头为JSON格式,输出JSON数据
        $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($response_data));
    } else {
        // 如果是普通请求,返回视图或者其他格式
        $this->load->view('data_view', $response_data);
    }
}

方式2:直接检查URI后缀(适合全局正则的情况)

如果用了全局正则路由,你可以通过$this->uri->uri_string()来检查原始URI是否包含.json:

public function index() {
    $response_data = [
        'status' => 'success',
        'data' => ['id' => 1, 'name' => 'Sample Data']
    ];

    if (str_ends_with($this->uri->uri_string(), '.json')) {
        $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($response_data));
    } else {
        $this->load->view('data_view', $response_data);
    }
}

这样就能完美实现你想要的.json后缀URL功能啦~

内容的提问来源于stack exchange,提问作者Saad Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:41