策略

路由回调函数的签名由路由策略决定。默认情况下,Slim 期望路由回调函数接受请求、响应和一个包含路由占位符参数的数组。这被称为 RequestResponse 策略。然而,你可以通过使用不同的策略来改变预期的路由回调函数签名。例如,Slim 提供了一种另外的策略叫做 RequestResponseArgs,它接受请求、响应以及每个路由占位符作为单独的参数。

以下是使用这种替代策略的示例:

<?php
use Slim\Factory\AppFactory;
use Slim\Handlers\Strategies\RequestResponseArgs;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

/**
 * 在 RouteCollector 组件上更改默认的调用策略会影响到在此更改之后定义的每个路由
 */
$routeCollector = $app->getRouteCollector();
$routeCollector->setDefaultInvocationStrategy(new RequestResponseArgs());

$app->get('/hello/{name}', function ($request, $response, $name) {
    $response->getBody()->write($name);

    return $response;
});

或者你可以在每个路由上设置不同的调用策略:

<?php
use Slim\Factory\AppFactory;
use Slim\Handlers\Strategies\RequestResponseArgs;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();
$routeCollector = $app->getRouteCollector();

$route = $app->get('/hello/{name}', function ($request, $response, $name) {
    $response->getBody()->write($name);

    return $response;
});
$route->setInvocationStrategy(new RequestResponseArgs());

你可以通过实现 Slim\Interfaces\InvocationStrategyInterface 来提供自己的路由策略。