Symfony:如何在URL参数中编码/?

时间:2018-07-27 09:49:23

标签: symfony

我想使用类似以下的URL构建RESTful API:

第一条路线:http://example.com/api/ {element_name} / aaa / {related_name}和 第二条路线:http://example.com/api/ {element_name} / bbb / {related_name}。

当element_name为整数或简单文本时,一切都很简单。 当参数{element_name}的名称中带有“ /” char时,事情就变得复杂了,因为即使我用%2f(URL编码)对/进行编码,路由也会在进程路由之前对%2f进行解码。

例如,当我想为第一个敌人生成URL且我有{element_name} = xyz和{related_name} = ooo时,URL将为http://example.com/api/xyz/aaa/ooo并且没关系。

但是当我有{element_name} = xyz / bbb和{related_name} = ooo时,URL应该是:http://example.com/api/xyz%2fbbb/aaa/ooo,但首先路由将解码URL并生成:http://example.com/api/xyz/bbb/aaa/ooo,但不是好的,因为与第一条路线不匹配。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要做的就是在控制器中配置路由时添加要求。像这样:

class DefaultController
{
  /**
  * @Route("/share/{token}", name="share", requirements={"token"=".+"})
  */
  public function share($token)
  {
    // ...
  }
}

它在SF文档中进行了说明:http://symfony.com/doc/current/routing/slash_in_parameter.html