chriskacerguis/codeigniter-restserver

CI Rest Server

3.1.7 2024-09-17 02:20 UTC

This package is auto-updated.

Last update: 2024-09-17 02:20:52 UTC


README

StyleCI

使用一个库、一个配置文件和一个控制器实现的 CodeIgniter 完全 RESTful 服务器。

重要!!

CodeIgniter 4 默认支持 REST,因此不需要 RestServer。

请参阅以下文档: RESTful 资源处理

要求

  • PHP 7.2 或更高版本
  • CodeIgniter 3.1.11+

安装

composer require chriskacerguis/codeigniter-restserver

使用

CodeIgniter Rest Server 可在 Packagist 上找到(使用语义版本控制),建议通过 composer 安装 CodeIgniter Rest Server。只需将以下行添加到您的 composer.json 文件中

"chriskacerguis/codeigniter-restserver": "^3.1"

或者运行

composer require chriskacerguis/codeigniter-restserver

请注意,您需要将 rest.php 复制到您的 config 目录中(例如 application/config

步骤 1: 将以下代码添加到您的控制器中(应在任何代码之前)

use chriskacerguis\RestServer\RestController;

步骤 2: 扩展您的控制器

class Example extends RestController

基本 GET 示例

以下是一个基本示例。此控制器应保存为 Api.php,可以通过两种方式调用

  • http://domain/api/users/ 将返回所有用户的列表
  • http://domain/api/users/id/1 将仅返回 id 为 1 的用户信息
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use chriskacerguis\RestServer\RestController;

class Api extends RestController {

    function __construct()
    {
        // Construct the parent class
        parent::__construct();
    }

    public function users_get()
    {
        // Users from a data store e.g. database
        $users = [
            ['id' => 0, 'name' => 'John', 'email' => '[email protected]'],
            ['id' => 1, 'name' => 'Jim', 'email' => '[email protected]'],
        ];

        $id = $this->get( 'id' );

        if ( $id === null )
        {
            // Check if the users data store contains users
            if ( $users )
            {
                // Set the response and exit
                $this->response( $users, 200 );
            }
            else
            {
                // Set the response and exit
                $this->response( [
                    'status' => false,
                    'message' => 'No users were found'
                ], 404 );
            }
        }
        else
        {
            if ( array_key_exists( $id, $users ) )
            {
                $this->response( $users[$id], 200 );
            }
            else
            {
                $this->response( [
                    'status' => false,
                    'message' => 'No such user found'
                ], 404 );
            }
        }
    }
}

扩展支持的格式

如果您需要支持更多回复格式,可以扩展 Format 类以添加所需的 to_... 方法

  1. 扩展 RestController 类(在 libraries/MY_REST_Controller.php 中)
<?php

use chriskacerguis\RestServer\RestController;

class MY_REST_Controller extends RestController
{
    public function __construct()
    {
        parent::__construct();
        // This can be the library's chriskacerguis\RestServer\Format
        // or your own custom overloaded Format class (see bellow)
        $this->format = new Format();
    }
}
  1. 扩展 Format 类(可以创建为 CodeIgniter 库,在 libraries/Format.php 中)。以下是一个添加支持 PDF 输出的示例
<?php

use chriskacerguis\RestServer\Format as RestServerFormat;

class Format extends RestServerFormat
{
    public function to_pdf($data = null)
    {
        if ($data === null && func_num_args() === 0) {
            $data = $this->_data;
        }

        if (is_array($data) || substr($data, 0, 4) != '%PDF') {
            $html = $this->to_html($data);

            // Use your PDF lib of choice. For example mpdf
            $mpdf = new \Mpdf\Mpdf();
            $mpdf->WriteHTML($html);
            return $mpdf->Output('', 'S');
        }

        return $data;
    }
}