当在对象名称中使用反斜杠并希望通过对象URL:时,我一直收到以下错误
在/ObjectBundle/Resources/views/object/index.html.titch中呈现模板期间引发异常(路由"object_show"的"参数"名称必须匹配"[^/]++"(给定"黑/白")才能生成相应的URL
控制器
/**
* @Route("/show/{user}/{name}", name="object_show")
* @Template()
*/
public function showAction($user, $name, Request $request)
{
$user = $this->getDoctrine()->getRepository('UserBundle:User')
->findBy(['username'=> $user]);
$object = $this->getDoctrine()->getRepository('ObjectBundle:Object')
->findOneBy(['name' => $name, 'user' => $user]);
return array('object' => $object);
}
如何允许对对象名称使用反斜杠并能够生成相应的URL?
模板
{% for object in objects %}
<div class="item" id="object_{{ object.id }}">
<a href="{{ path('object_show',
{'user': object.user.username, 'name' : object.name }) }}">
<div class="title">{{ object.name }}</div>
</a>
</div>
您需要将, requirements={"name"=".+"}
部件添加到您的路线定义中。例如:
/**
* @Route("/show/{user}/{name}", name="object_show", requirements={"name"=".+"})
* @Template()
*/
public function showAction($user, $name, Request $request)
请参阅手册部分:手册。
路由与正则表达式匹配。
"[^/]++"
是变量值需要匹配的默认模式。它将匹配所有不是/
的内容。您将得到一个异常,因为作为name
传递的值是black/white
(因此它包含一个不允许的/
)。
如果数值不正确,请将其清除。
如果值是正确的,并且您确实需要匹配它,那么您可以更改name参数的要求。例如:
/**
* @Route(
* "/show/{user}/{name}",
* name="object_show",
* requirements={"name": ".+"}
* )
*/
它可以接受任何字符,所以如果这是你真正想要的,请小心。您需要根据自己的需要调整需求。
相关路由文档可在此处找到:
- 添加要求
- 参数中的斜杠