kuliebiakin / simple-rest-api
简单的 WordPress REST API 路由器
2.0.1
2023-01-04 16:08 UTC
Requires
- php: ^7.3 || ^8.0
- ext-mbstring: *
Requires (Dev)
- innocode-digital/php-cs: ^1.0
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-04 19:48:44 UTC
README
WordPress REST API 路由器,使用非常简单。
安装
Composer
$ composer require shtrihstr/simple-rest-api
旧方法
从 发布部分 下载存档
require_once '/path/to/Route.php'; require_once '/path/to/Router.php';
用法
创建一个路由器
$router = new Simple_REST_API\Router( 'my-plugin/v1.0', [ 'etag' => true ] );
示例 GET 路由
下面是一个 GET 路由的示例定义
$router->get( '/posts', function() { return get_posts(); } );
动态路由
现在你可以创建另一个控制器来查看单个博客文章
$router->get( '/post/{id}', function( WP_REST_Response $response, $id ) { $post = get_post( $id ); if( ! $post ) { $response->set_status( 404 ); } else { $response->set_data( $post ); } return $response; } );
示例 POST 路由
POST 路由表示资源的创建。例如,这是一个反馈表单。
$router->post( '/feedback', function( WP_REST_Request $request, WP_REST_Response $response ) { $body_params = $request->get_body_params(); $message = esc_html( $body_params['message'] ); wp_mail( 'feedback@yoursite.com', '[YourSite] Feedback', $message ); $response->set_status( 201 ); $response->set_data( 'Thank you for your feedback!' ); return $response; } );
其他方法
你可以为大多数 HTTP 方法创建控制器。
$router->put( '/post/{id}', function( $id ) { // ... } ); $router->delete( '/post/{id}', function( $id ) { // ... } ); $router->patch( '/post/{id}', function( $id ) { // ... } );
路由变量
如前所述,你可以在路由中定义变量部分,如下所示
$router->get( '/post/{id}', function( $id ) { // ... } );
也可以有多个变量部分,只需确保闭包参数与变量部分的名称匹配即可
$router->get( '/post/{post_id}/paged/{page_id}', function( $post_id, $page_id ) { // ... } );
虽然不推荐,但你也可以这样做(注意参数的切换)
$router->get( '/post/{post_id}/paged/{page_id}', function( $page_id, $post_id ) { // ... } );
你还可以请求当前请求和响应对象
$router->get( '/post/{id}', function( WP_REST_Request $request, WP_REST_Response $response, $id ) { // ... } );
路由变量转换器
在将路由变量注入控制器之前,你可以应用一些转换器
$router->get( '/post/{id}', function( $id ) { // ... } )->convert( 'id', function( $id ) { return (int) $id; } );
当你想将路由变量转换为对象时非常有用
$router->get( '/comments/{user}', function( $user ) { // ... } )->convert( 'user', function( $user ) { return get_user_by( 'id', $user ); } );
要求
以下将确保 id 参数是一个正整数,因为 \d+ 匹配任何数量的数字
$router->get( '/post/{id}', function( $id ) { // ... } )->assert( 'id', '\d+' );
中间件
路由中间件添加到路由中,并且仅在匹配相应路由时触发。你还可以堆叠它们
$before_callback = function() { $GLOBALS['wpdb']->queries = []; }; $after_callback = function( WP_REST_Response $response ) { $data = $response->get_data(); if( is_array( $data ) ) { $data['debug'] = [ 'time' => timer_stop(), 'queries' => $GLOBALS['wpdb']->queries, ]; $response->set_data( $data ); } }; $router->get( '/post/{id}', function( $id ) { // ... } )->before( $before_callback )->after( $after_callback );