【发布时间】:2015-05-06 03:40:50
【问题描述】:
我在 Silex 中构建了一个 URL 以匹配 /tutorial 或 /tutorial/index 或 /tutorial/pageX 其中 X 是一个数字,但我也希望它匹配 /tutorial/ 并且我正在努力做到这一点发生。这是我到目前为止的路线:
$app->get('/tutorial/{page}', 'app\\Controller\\Tutorial::index')
->assert('page', '(^(page[\d]+|index)$|^$)')
->value('page', 'index');
如果我尝试 regex in regex101.com 它可以工作,没有任何匹配项。那么为什么它不能在 Silex 中工作,我可以使用什么来工作呢?
如果这是重复的,但我的所有搜索都出现了类似的东西,但不是整个字符串必须匹配或什么都没有的确切情况。
【问题讨论】:
-
你能检查一下这是不是你想要的吗? regex101.com/r/rT4qK3/1?否则,请说明输入字符串可以是什么以及您希望输出的样子。
-
这就是我想要的输出,但
/tutorial/不应该在正则表达式中,因为正则表达式仅适用于{page}值。我希望{page}成为pageX,其中X是一个数字,或者index,或者什么都没有。我不确定如何澄清这一点。你熟悉 symfony / silex 中的路由吗? -
我大致了解您要做什么。
page是一个变量,您尝试使用assert对其进行验证,并且您还将index设置为其默认值。如果^(page\d+|index|)$在当前代码中不起作用,请尝试不要将value与assert一起使用,在查询中传递“索引”值,然后看看它是否有效。并尝试使用'app\Controller\Tutorial::index'。 -
几乎,如果 URL 是
/tutorial,value方法会将{page}设置为index。如果 URL 是/tutorial/a_value,那么它将值与正则表达式匹配,如果它通过调用app\Controller\Tutorial::index方法,将a_value作为变量$page传入。如果该值与正则表达式不匹配,则会引发错误, -
那么,您是否尝试使用更新的正则表达式
->value('page', '');?你得到预期的行为吗?如果不是,我想问题出在无法处理空匹配的 Tutorial::index 方法上。
标签: regex symfony routes silex