shtrihstr / simple-rest-api
简单的WordPress REST API路由器
1.0.0
2016-05-03 07:53 UTC
Requires
- php: ^5.5 || ^7.0
This package is not auto-updated.
Last update: 2024-09-14 19:25:33 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 );