rareloop/wp-router

路由器

安装量: 1,754

依赖项: 0

建议者: 0

安全: 0

星标: 15

关注者: 7

分支: 2

开放问题: 2

类型:wordpress-plugin

v1.0.1 2017-07-25 14:05 UTC

This package is auto-updated.

Last update: 2024-09-12 04:06:50 UTC


README

此包不再受支持。使用风险自负。我们建议使用底层的路由器:https://github.com/Rareloop/router

Rare WordPress Router

CI

A WordPress wrapper around the Rareloop PHP Router. Easily handle custom endpoints on your WordPress site with this plugin.

安装

尽管不是必需的,但使用 Composer 和类似 Bedrock 的设置是推荐的安装方法。

composer require rareloop/wp-router

使用方法

创建路由

映射

创建路由是通过使用 map 函数完成的

use Rareloop\WordPress\Router\Router;

// Creates a route that matches the uri `/posts/list` both GET 
// and POST requests. 
Router::map(['GET', 'POST'], 'posts/list', function () {
    return 'Hello World';
});

map() 接受 3 个参数

  • methods (数组): 匹配请求方法的列表,有效值
    • GET
    • POST
    • PUT
    • PATCH
    • DELETE
    • OPTIONS
  • uri (字符串): 要匹配的 URI
  • action (函数|string): 闭包或控制器字符串

路由参数

可以使用 {keyName} 语法在路由上定义参数。当匹配包含参数的路由时,将传递 RouteParams 对象的实例到动作。

Router::map(['GET'], 'posts/{id}', function(RouteParams $params) {
    return $params->id;
});

命名路由

可以通过命名路由来生成其 URL 的程序化表示

Router::map(['GET'], 'posts/all', function () {})->name('posts.index');

$url = Router::url('posts.index');

如果路由需要参数,您可以传递一个关联数组作为第二个参数

Router::map(['GET'], 'posts/{id}', function () {})->name('posts.show');

$url = Router::url('posts.show', ['id' => 123]);

HTTP 动词快捷方式

通常您只需要为路由允许一个 HTTP 动词,对于这些情况,可以使用以下快捷方式

Router::get('test/route', function () {});
Router::post('test/route', function () {});
Router::put('test/route', function () {});
Router::patch('test/route', function () {});
Router::delete('test/route', function () {});
Router::options('test/route', function () {});

设置基本路径

路由器假定您正在从域的路由开始工作。如果不是这种情况,您可以设置基本路径

Router::setBasePath('base/path');
Router::map(['GET'], 'route/uri', function () {}); // `/base/path/route/uri`

控制器

如果您想使用一个类来将相关的路由动作分组在一起,可以将控制器字符串传递给 map() 而不是闭包。字符串的格式为 {类名}@{方法名}。使用类名和完整命名空间非常重要。

示例

// TestController.php
namespace \MyNamespace;

class TestController
{
    public function testMethod()
    {
        return 'Hello World';
    }
}

// routes.php
Router::map(['GET'], 'route/uri', '\MyNamespace\TestController@testMethod');

创建组

将类似的路由放在公共前缀后面是很常见的。这可以通过使用路由组来实现

Router::group('prefix', function ($group) {
    $group->map(['GET'], 'route1', function () {}); // `/prefix/route1`
    $group->map(['GET'], 'route2', function () {}); // `/prefix/route2§`
});