使用存在的注释或 url 参数路由时路由名称的正确语法

correct syntax for route name when routing with annotations in presence or url parameters

我在控制器中使用注释来解析 url“/registerded”

/**
 * @Route("/registered", name="registered_user")
 */
public function registeredAction(){
    return $this->render('MyBundle:Default:registered.html.twig');
}

这工作正常,没有参数。当我在注释中将其称为 "path" 并使用 "name" 参数定义时,效果很好。正是我在同一个控制器的另一个动作中使用它:

return $this->redirectToRoute('/registered_user');

这样就可以了

现在我想要一个像“/registerded/45”这样的工作 url,我需要用上面这样的路径名来引用它。我想是这样的:

return $this->redirectToRoute('/registered_user/45');

我想使用注释(我知道如何在 routing_dev.yml 等下进行,但我想在控制器中使用注释)。 我试过了

/**
 * @Route("/registered/{id}", name="registered_user/{id}")
 */
public function registeredAction($id){
    return $this->render('MyBundle:Default:registered.html.twig');
}

但这不是名称参数的正确配置。我收到:

Unable to generate a URL for the named route "/registered_user/45" as such route does not exist.

当我需要像上面的重定向 url 一样传递 url 参数时,有人可以建议我注释中名称参数的正确语法吗?

生成url地址时不需要添加/前缀。

此外,如果您在使用 Symfony 的方法时遇到问题,您可以随时查看定义方式和参数预期。

为了回答您的问题,因为您已经在路线 registered_user 中添加了名称,为了让 URL 像 /registered/45,您只需要编辑路线路径,并且传递所需的参数。

所以,为此:

/**
 * @Route("/registered/{id}", name="registered_user")
 */

您的重定向调用应如下所示:

return $this->redirectToRoute('registered_user', array(
    'id' => 45
));

来自 Controller.php

的副本
/**
 * Returns a RedirectResponse to the given route with the given parameters.
 *
 * @param string $route      The name of the route
 * @param array  $parameters An array of parameters
 * @param int    $status     The status code to use for the Response
 *
 * @return RedirectResponse
 */
protected function redirectToRoute($route, array $parameters = array(), $status = 302)
{
    return $this->redirect($this->generateUrl($route, $parameters), $status);
}