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


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

我在控制器中使用注释来解析url "/registered "

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

如果没有参数,可以正常工作。当我在注释中用"name"参数定义它为"path"时,它工作得很好。我在同一个控制器的另一个动作中使用它:

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

一切都好。

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

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

我想使用注释(我知道如何使它在routing_dev。但我想在控制器中使用注释)。我试着

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

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

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

请有人可以建议我正确的语法名称参数在注释当我需要传递一个url参数与上面的重定向url ?

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

同样,如果你在使用Symfony中的方法时遇到麻烦,你可以查看它是如何定义的,以及参数期望什么。

回答你的问题,因为你已经给你的路由registered_user添加了名称,为了得到像/registered/45这样的URL,你只需要编辑你的路由路径,并传递所需的参数。

那么,对于这个:

/**
 * @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);
}