Php 在呈现模板期间引发了Symfony2异常(“路由参数必须匹配”[^/]&“x2B”以生成相应的URL。”)
当在对象名称中使用反斜杠并希望通过对象URL继续时,我不断遇到以下错误: 在/ObjectBundle/Resources/views/object/index.html.twig中呈现模板时引发异常(“路由“object_show”的参数“name”必须匹配“[^/]++”(“给定黑/白”)以生成相应的URL。”) 控制器Php 在呈现模板期间引发了Symfony2异常(“路由参数必须匹配”[^/]&“x2B”以生成相应的URL。”),php,symfony,Php,Symfony,当在对象名称中使用反斜杠并希望通过对象URL继续时,我不断遇到以下错误: 在/ObjectBundle/Resources/views/object/index.html.twig中呈现模板时引发异常(“路由“object_show”的参数“name”必须匹配“[^/]++”(“给定黑/白”)以生成相应的URL。”) 控制器 /** * @Route("/show/{user}/{name}", name="object_show") * @Template() */ public fun
/**
* @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>
{%for objects%}
路由与正则表达式匹配
“[^/]+”
是变量值需要匹配的默认模式。它将匹配不是/
的所有内容。您得到了一个异常,因为您作为名称
传递的值是黑/白
(因此它包含一个/
,这是不允许的)
如果该值不正确-清洁它
如果该值正确并且您确实需要匹配它,则可以更改name参数的要求。例如:
/**
* @Route("/show/{user}/{name}", name="object_show", requirements={"name"=".+"})
* @Template()
*/
public function showAction($user, $name, Request $request)
/**
*@路线(
*“/show/{user}/{name}”,
*name=“object\u show”,
*要求={“名称”:“+”}
* )
*/
它可以接受任何字符,所以如果这是您真正想要的,请小心。您需要根据自己的需要调整需求
相关的工艺路线文件可在此处找到:
,requirements={“name”=“+”}
部分添加到您的路线定义中。例如:
/**
* @Route("/show/{user}/{name}", name="object_show", requirements={"name"=".+"})
* @Template()
*/
public function showAction($user, $name, Request $request)
请参阅手册部分:。我们可以看看你的模板吗?@scoolnico当然,我首先在问题中添加了代码,在你的控制器中,你必须返回
对象,因为你的小枝中有循环:返回数组('objects'=>$object)代码>。。。您的循环是不必要的,因为您使用本机findOneBy
方法在查询中只获取1个结果…@scoolnico“objects”是不同操作的结果,问题在于链接的href。如果名称不包含斜杠,则一切正常