Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 如果出现多个连字符,则从路由中获取变量_Php_Symfony - Fatal编程技术网

Php 如果出现多个连字符,则从路由中获取变量

Php 如果出现多个连字符,则从路由中获取变量,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

使用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"=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}如果您有许多类似的路由,那么您可以使用侦听器在幕后执行这种转换。