Slim 3 多个路由到一个功能?

Slim 3 multiple routes to one function?

我在网上找遍了,找不到任何告诉您如何将多个路由分配给一个回调的信息。例如我要移动:

$app->get('/sign-in', function($request, $response) {
    return $this->view->render($response, 'home.twig');
});

$app->get('/login', function($request, $response) {
    return $this->view->render($response, 'home.twig');
});

变成类似这样的东西:

$app->get(['/sign-in', '/login'], function($request, $response) {
    return $this->view->render($response, 'home.twig');
});

有没有办法用 Slim 3 做到这一点?我在网上发现,在 Slim 2 中,您可以在末尾使用 conditions([]); 函数将多个路由链接到一个回调。

只需将函数创建为闭包并将其作为参数传递即可:

$home = function($request, $response) {
    return $this->view->render($response, 'home.twig');
};

$app->get('/sign-in', $home);

$app->get('/login',   $home);

或者使用命名函数:

function home($request, $response) {
    return $this->view->render($response, 'home.twig');
};
$app->get('/sign-in', 'home');

$app->get('/login',   'home');

看来你可以简单地定义一个数组并循环遍历它以在一个函数上创建多个路由。

$routes = [
    '/',
    '/home', 
    '/sign-in',
    '/login',
    '/register',
    '/sign-up',
    '/contact'
];

foreach ($routes as $route) {
    $app->get($route, function($request, $response) {
        return $this->view->render($response, 'home.twig');
    });
}

FastRoute 不做你想做的事,但是,你可以使用通过正则表达式限制到你想使用的 url 列表的参数:

$app->get("/{_:sign-in|login}", function ($request, $response) {
    $response->write("Hello!");
    return $response;
});

请注意,您必须有一个参数名称,所以我使用 _ 因为它无害。

我正在使用正则表达式来完成这个技巧:

$app->get('/{router:login|sign-in}', function ($request, $response, $args) {
  echo "Hello, " . $args['router'];
});