chriskacerguis / codeigniter-restserver
CI Rest Server
3.1.7
2024-09-17 02:20 UTC
README
使用一个库、一个配置文件和一个控制器实现的 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_...
方法
- 扩展
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(); } }
- 扩展
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; } }