【发布时间】:2016-08-19 18:07:17
【问题描述】:
是否可以在 Silex 2 路由中使用 RegEx?
我需要这样做:
$this->get('/(adios|goodbay)', function (Request $request) use ($app) {
return $app['twig']->render('bye.html.twig', []);
})->bind('bye');
【问题讨论】:
是否可以在 Silex 2 路由中使用 RegEx?
我需要这样做:
$this->get('/(adios|goodbay)', function (Request $request) use ($app) {
return $app['twig']->render('bye.html.twig', []);
})->bind('bye');
【问题讨论】:
正如 Thomas 所说,是的,您可以。文档的重要部分是route requirements:
在某些情况下,您可能只想匹配某些表达式。您可以通过在路由方法返回的 Controller 对象上调用 assert 来使用正则表达式来定义需求。
例如:
$app->get('/blog/{postId}/{commentId}', function ($postId, $commentId) {
// ...
})
->assert('postId', '\d+')
->assert('commentId', '\d+');
因此,在您的情况下,路线的定义类似于:
$this->get('/{bye}', function (Request $request) use ($app) {
return $app['twig']->render('bye.html.twig', []);
})
->assert('bye', '^(adios|goodbye)$')
->bind('bye');
如果你也想知道参数的值,直接传给控制器即可(参数名称必须与路由定义中的参数名称一致):
$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');
【讨论】:
鉴于docPage 8:
在 Silex 中,您定义一个路由和匹配该路由时调用的控制器。路由模式包括:
- Pattern :路由模式定义了指向资源的路径。该模式可以包含可变部分,您可以为它们设置 RegExp 要求。
所以我想说可以像你在问题中那样使用正则表达式。
【讨论】: