Silex 2:路由中的RegEx

cyb*_*tow 2 php regex routing silex

是否可以在Silex 2路由中使用RegEx?

我需要做这样的事情:

$this->get('/(adios|goodbay)', function (Request $request) use ($app) {
    return $app['twig']->render('bye.html.twig', []);
})->bind('bye');
Run Code Online (Sandbox Code Playgroud)

mTo*_*res 5

正如托马斯所说,是的,你可以.文档的重要部分是路由要求:

在某些情况下,您可能只想匹配某些表达式.您可以通过调用Controller对象上的assert来使用正则表达式定义需求,该对象由路由方法返回.

例如:

$app->get('/blog/{postId}/{commentId}', function ($postId, $commentId) {
    // ...
})
->assert('postId', '\d+')
->assert('commentId', '\d+');
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,路线的定义将是这样的:

$this->get('/{bye}', function (Request $request) use ($app) {
    return $app['twig']->render('bye.html.twig', []);
})
->assert('bye', '^(adios|goodbye)$')
->bind('bye');
Run Code Online (Sandbox Code Playgroud)

如果您还想知道参数的值,只需将其传递给控制器​​(参数名称必须与路径定义中的参数名称匹配):

$this->get('/{bye}', function (Request $request, $bye) use ($app) {
    if ($bye === 'adios') {
      $sentence = "eso es todo amigos!";
    }
    else {
      $sentence = "that's all folks!";
    }

    return $app['twig']->render('bye.html.twig', ["sentence" => $sentence]);
})
->assert('bye', '^(adios|goodbye)$')
->bind('bye');
Run Code Online (Sandbox Code Playgroud)