gaetanroger/slim-routes-loader

使用简单的配置文件注册您的Slim路由。

0.2 2017-11-25 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:01:39 UTC


README

Build Status

当使用 Slim PHP 框架 时,您需要注册您的路由。这个库允许您通过简单的配置文件来实现。

如何安装

使用composer是最简单的方法。

composer require gaetanroger/slim-routes-loader

您始终可以从这个仓库获取源代码,并在您的项目中手动安装。

如何使用

有关要遵循的语法的更多信息,请参阅 语法和规则

常规PHP数组格式

使用常规PHP关联数组编写您的路由,然后使用Loader类来导入。

$routes = [
    'pattern' => '',
    'routes'  => [
        [
            'pattern'  => '/',
            'method'   => 'GET',
            'callable' => 'myCallable',
            'name'     => 'optianalName',
        ],
    ],
];
$slim = new \Slim\App();

$loader = new Gaetanroger\SlimRoutesLoader\Loader($routes);
$loader->load($slim); // or $loader($slim)

如果您想将路由存储在另一个文件中,只需使用常规PHP require来包含它们。

$routes = require __DIR__ '/myRoutes.php';
$slim = new \Slim\App();

$loader = new \Gaetanroger\SlimRoutesLoader\Loader($routes);
$loader($slim); // or $loader->load($slim)

Json格式

如果您更喜欢以Json编写路由,只需使用JsonLoader

{
    "pattern": "",
    "routes": [
        {
            "pattern": "/",
            "method": "GET",
            "callable": "testCallable",
            "name": "testName"
        }
    ]
}
$slim = new \Slim\App();

$loader = new \Gaetanroger\SlimRoutesLoader\JsonLoader($json);
$loader($slim); // or $loader->load($slim)

$json变量可以包含一个json字符串或包含路由的json文件的路径。

Yaml格式

如果您更喜欢以Yaml编写路由,只需使用YmlLoader

pattern:
routes:
  - pattern: /
    method: GET
    callable: testCallable
    name: testName
$slim = new \Slim\App();

$loader = new \Gaetanroger\SlimRoutesLoader\YmlLoader($yml);
$loader($slim); // or $loader->load($slim)

$yml变量可以包含一个Yaml字符串或包含路由的Yaml文件的路径。

语法和规则

无论您选择哪种格式,加载器都需要一定的语法。

有关特定点的更多信息,请参阅 Slim 文档

路由语法

  • pattern:路由模式
  • method:等待的路由的HTTP方法(GET、POST等)
  • callable:当到达路由时要调用的函数/方法/可调用对象
  • name:(可选)路由的名称

组语法

  • pattern:组模式
  • routes:包含其他组或路由的数组

一般规则

  • 顶级元素必须是一个组(通常使用空模式,除非您想为所有路由添加前缀)
  • 模式可以留空。

示例

PHP数组语法

$routes = [
    'pattern' => '',
    'routes'  => [
        [
            'pattern'  => '/one',
            'method'   => 'GET',
            'callable' => 'testCallable1',
            'name'     => 'testName1',
        ],
        [
            'pattern'  => '/two',
            'method'   => 'POST',
            'callable' => 'testCallable2',
            'name'     => 'testName2',
        ],
        [
            'pattern' => '/group',
            'routes'  => [
                [
                    'pattern'  => '/one',
                    'method'   => 'GET',
                    'callable' => 'testCallable1',
                    'name'     => 'testName1',
                ],
                [
                    'pattern'  => '/two',
                    'method'   => 'POST',
                    'callable' => 'testCallable2',
                    'name'     => 'testName2',
                ],
            ],
        ],
    ],
];

Json语法

{
    "pattern": "",
    "routes": [
        {
            "pattern": "/one",
            "method": "GET",
            "callable": "testCallable1",
            "name": "testName1"
        },
        {
            "pattern": "/two",
            "method": "POST",
            "callable": "testCallable2",
            "name": "testName2"
        },
        {
            "pattern": "/group",
            "routes": [
                {
                    "pattern": "/one",
                    "method": "GET",
                    "callable": "testCallable1",
                    "name": "testName1"
                },
                {
                    "pattern": "/two",
                    "method": "POST",
                    "callable": "testCallable2",
                    "name": "testName2"
                }
            ]
        }
    ]
}

Yaml语法

pattern:
routes:
  - pattern: /one
    method: GET
    callable: testCallable1
    name: testName1
  - pattern: /two
    method: POST
    callable: testCallable2
    name: testName2
  - pattern: /group
    routes:
      - pattern: /one
        method: GET
        callable: testCallable1
        name: testName1
      - pattern: /two
        method: POST
        callable: testCallable2
        name: testName2';