Php 在呈现模板期间引发了Symfony2异常(“路由参数必须匹配”[^/]&“x2B”以生成相应的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

当在对象名称中使用反斜杠并希望通过对象URL继续时,我不断遇到以下错误:

在/ObjectBundle/Resources/views/object/index.html.twig中呈现模板时引发异常(“路由“object_show”的参数“name”必须匹配“[^/]++”(“给定黑/白”)以生成相应的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>
{%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。如果名称不包含斜杠,则一切正常