Php Silex 2:路由中的正则表达式

Php Silex 2:路由中的正则表达式,php,regex,routing,silex,Php,Regex,Routing,Silex,是否可以在Silex 2路由中使用正则表达式 我需要这样做: $this->get('/(adios|goodbay)', function (Request $request) use ($app) { return $app['twig']->render('bye.html.twig', []); })->bind('bye'); 鉴于: 在Silex中,您定义了一个路由和当该路由匹配时调用的控制器。路线模式包括: 模式:路由模式定义指向资源的路径。模式可以包

是否可以在Silex 2路由中使用正则表达式

我需要这样做:

$this->get('/(adios|goodbay)', function (Request $request) use ($app) {
    return $app['twig']->render('bye.html.twig', []);
})->bind('bye');
鉴于:

在Silex中,您定义了一个路由和当该路由匹配时调用的控制器。路线模式包括:

  • 模式:路由模式定义指向资源的路径。模式可以包括可变部分,您可以为它们设置RegExp要求

所以我想说,可以像你在问题中那样使用正则表达式。

正如托马斯所说,是的,你可以。文件的重要部分包括:

在某些情况下,您可能只希望匹配某些表达式。您可以通过调用路由方法返回的控制器对象上的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');
如果您还想知道参数的值,只需将其传递给控制器(参数名称必须与路由定义中的参数名称匹配):


谢谢我试过这个“/(再见| goodbay)/”但它不起作用,你能帮我吗?@cybtow,你能用“它不起作用”来详细说明吗?您收到404的HTTP状态是什么?您是否检查过Silex日志(假设您启用了“调试”功能,并且在开发过程中应该使用独白)?这是RouterListener.php第125行中显示的NotFoundHttpException错误:当我使用这些路由中的任何一个时,都没有找到“GET/adios”的路由:$This->GET('^/(adios | goodbay)/$,$This->GET('/^(adios | goodbay)$/),$This->GET('/(adios | goodbay)/’.ThanksAnd,是否可以从闭包函数中知道是否使用“adios”或“再见”调用了它?ThanksI一直在考虑从Silex迁移到Symfony(主要是因为我对Silex缺乏了解),但一点一点地,我发现你可以用Symfony轻松地做任何事情。@CarlosAlbertoMartínezGadea,请记住,从2018年开始。你应该尝试迁移到SF4。这是一个例子。@mTorres非常感谢你让我知道这篇文章。我肯定会把这类消息贴出来。我会转到Symfony 4那么,由于我的项目刚刚开始,现在这样做比忍受缺乏支持和未来补丁/维护的痛苦更有意义。
$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');