减少3个多个路由到一个功能?

时间:2017-03-28 01:00:55

标签: php rest slim slim-3

我一直在网上查找,找不到任何能告诉你如何为一个回调分配多条路线的东西。例如,我想搬家:

$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([]);函数将多条路由链接到一个回调。

4 个答案:

答案 0 :(得分:3)

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

$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');
    });
}

答案 1 :(得分:2)

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

__init__

或使用命名函数:

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

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

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

答案 2 :(得分:1)

FastRoute没有达到您想要的效果,但是,您可以将通过正则表达式限制的参数用于您要使用的网址列表:

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

请注意,您必须拥有参数名称,因此我使用_,因为它无用。

答案 3 :(得分:0)

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

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