Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony路由正则表达式:如何编写可选字符?_Php_Regex_Symfony - Fatal编程技术网

Php Symfony路由正则表达式:如何编写可选字符?

Php Symfony路由正则表达式:如何编写可选字符?,php,regex,symfony,Php,Regex,Symfony,我只是对路由配置中的symfony regex模式有点小麻烦 我想同时匹配/关键字和/关键字URL。/字符是可选的。 这是我的模式: pattern: /{keyword}/? /keyword/与模式匹配,而/keyword不匹配 我应该如何编写模式?我认为在路由中不能有正则表达式模式。可以要求关键字具有特定的正则表达式模式,但这是另一回事 如果您使用的是YML,那么我认为最好的办法是有两条不同的路线: route1: pattern: /{keyword} ... ro

我只是对路由配置中的symfony regex模式有点小麻烦

我想同时匹配
/关键字
/关键字
URL。
/
字符是可选的。
这是我的模式:

pattern:  /{keyword}/?
/keyword/
与模式匹配,而
/keyword
不匹配


我应该如何编写模式?

我认为在路由中不能有正则表达式模式。可以要求
关键字
具有特定的正则表达式模式,但这是另一回事

如果您使用的是YML,那么我认为最好的办法是有两条不同的路线:

route1:
    pattern: /{keyword}
    ...

route2:
    pattern: /{keyword}/
    ...
如果使用的是注释,则可以将它们都放在控制器操作的顶部:

/**
* @Route("/{keyword}");
* @Route("/{keyword}/");
*/

在功能所在的控制器中,使用注释:

/**
 * Function
 * 
 * 
 * @Route("your/route/{keyword}")
 * @Route("your/route/{keyword}/")
 */

您可以通过两种路径访问此功能。

如果添加尾部斜杠,则此功能是可选的-用户将从没有斜杠的路径重定向到有斜杠的路径。因此,
/{keyword}/
模式将同时适用于
/{keyword}
/{keyword}/


但是,如果您定义它时没有尾部斜杠-
/{keyword}
,它将仅适用于
/{keyword}

谢谢。实际上,我注意到/keyword url请求301重定向到/keyword/。这似乎是相当好的搜索引擎优化:)不要创建第二条路线。“@Route(“acme/{keyword}/”)就足够了。