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)
正如托马斯所说,是的,你可以.文档的重要部分是路由要求:
在某些情况下,您可能只想匹配某些表达式.您可以通过调用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)