Php 如果出现多个连字符,则从路由中获取变量
使用symfony 3.0,我想从URL获取IDPhp 如果出现多个连字符,则从路由中获取变量,php,symfony,Php,Symfony,使用symfony 3.0,我想从URL获取ID /** * @Route("/pathtocontent/{id}-{name}", defaults={"id"=null,"name"=null}, requirements={"name"="[a-zA-Z0-9\-_\/]+", "id"="\d+"}, name="routingname") * @Route("/pathtocontent/{name}-{id}", defaults={"id"=null,"name
/**
* @Route("/pathtocontent/{id}-{name}", defaults={"id"=null,"name"=null},
requirements={"name"="[a-zA-Z0-9\-_\/]+", "id"="\d+"}, name="routingname")
* @Route("/pathtocontent/{name}-{id}", defaults={"id"=null,"name"=null},
requirements={"name"="[a-zA-Z0-9\-_\/]+", "id"="\d+"},
name="routingname_alias")
*/
public function pathAction(Request $request, $id = null) {
}
所以我有两个相同的动作规则。URL可以是:
/pathtocontent/Name-part-comes-here-1234
也可能是这样的:
/pathtocontent/1234名称部分出现在此处
问题出现在第一种情况下,该名称会获得所有:
Name-part-comes-here-1234值,Id为null
如何强制第一个案例也解析Id值,因此我需要从以下位置获取Id(1234):
/pathtocontent/Name-part-comes-here-1234
仅使用:
@Route("/pathtocontent/{name}/{id}", defaults={"id"=null,"name"=null},
因为我知道有很多连字符。但是必须有一个解决方案,我想我不认为
@Route(“/pathtocontent/{name}-{id}”
是有效的,如果你的名称
包含连字符。转换器如何知道id
?这是我想弄明白的,这是不可能的,因为在你的名称
regex中,Route{name}-{id}
id将始终由名称
正则表达式匹配,因为您允许使用数字0-9
。因此不再需要解析任何内容,因此id将为null。我可以看到的唯一方法是使用/{nameid}如果您有许多类似的路由,那么您可以使用侦听器在幕后执行这种转换。