【问题标题】:Silex optional slug in route路线中的 Silex 可选 slug
【发布时间】: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|)$ 在当前代码中不起作用,请尝试不要将valueassert 一起使用,在查询中传递“索引”值,然后看看它是否有效。并尝试使用'app\Controller\Tutorial::index'
  • 几乎,如果 URL 是 /tutorialvalue 方法会将 {page} 设置为 index。如果 URL 是/tutorial/a_value,那么它将值与正则表达式匹配,如果它通过调用app\Controller\Tutorial::index 方法,将a_value 作为变量$page 传入。如果该值与正则表达式不匹配,则会引发错误,
  • 那么,您是否尝试使用更新的正则表达式 ->value('page', '');?你得到预期的行为吗?如果不是,我想问题出在无法处理空匹配的 Tutorial::index 方法上。

标签: regex symfony routes silex


【解决方案1】:

试试这个正则表达式:

^(page\d+|index|)$

它将匹配“pagen”、“index”或“”。

如果你仍然没有达到你所需要的,我想问题是 app\Controller\Tutorial::index 方法无法处理空匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2013-11-23
    相关资源
    最近更新 更多