Paramconverter与FOSRestbundle

时间:2014-03-23 18:58:23

标签: symfony fosuserbundle fosrestbundle

我正在尝试将路由器转换为用户名。不幸的是,paramconverter总是搜索id。

我已经尝试了几种设置,我目前的设置如下:

   /*
    * @ParamConverter("username", class="StregoUserBundle:User")
    * @Rest\View(serializerEnableMaxDepthChecks=true, serializerGroups={"Default","user"})
    * @param User $user username
    */
    public function getUserAction(User $username){
          $return = array('user' => $user);
          return $return;
    }

路由本身由FOSRestBundle自动定义,如下所示:

  

get_user获取任何内容   / API /用户/ {用户名}。{_格式}

如果通过用户名找到用户,我该怎么做?

2 个答案:

答案 0 :(得分:3)

来自Symfony文档:

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#built-in-converters

/*
 * @ParamConverter("username", class="StregoUserBundle:User", options={"id" = "username"})
 * @Rest\View(serializerEnableMaxDepthChecks=true, serializerGroups={"Default","user"})
 * @param User $user username
 */
 public function getUserAction(User $username){
     $return = array('user' => $user);
     return $return;
 }

将id设置为您的参数名称,并且您已全部设置。

答案 1 :(得分:0)

Symfony documentation for ParamConverter提到映射哈希选项作为使用多个字段进行匹配的方法。但是,它们提供的注释示例使用单个字段,这是您想要的。

  

如果要匹配使用多个字段的实体,请使用映射哈希选项:键是路径占位符名称,值是Doctrine字段名称:

/**
 * @Route("/blog/{date}/{slug}/comments/{comment_slug}")
 * @ParamConverter("post", options={"mapping": {"date": "date", "slug": "slug"}})
 * @ParamConverter("comment", options={"mapping": {"comment_slug": "slug"}})
 */
public function showAction(Post $post, Comment $comment)
{
}