Symfony2 FOSRestBundle return 实体字段包含在表单中

Symfony2 FOSRestBundle return entity fields contained in form

我在 Symfony2 中使用 FOSRestBundle 来提供 REST 服务。

目前我的控制器 returns 请求资源时的实体(例如 /users/40)。 前端包含一个表单,允许操作此资源并使用 PUT 将其发回。控制器使用表单处理数据。

我的问题是,表单的字段少于整个实体的字段(idpassword_hash 就是很好的例子)。我得出的结论是,将整个实体发送给客户是个坏主意。相反,我希望 FOSRestBundle 仅发送表单中可用的实体字段。

所以我刚试过:

return $this->createForm(UserType::class, $entity);

FOSRestBundle从服务器返回的JSON结构看起来很不错。但不幸的是它不包含值。

当然不是 - 表单未绑定。而此时绑定数据就没有意义了。因此,我需要找到另一个解决方案。

这个用例在我的应用程序中会很常见。所以我想知道是否没有简单/标准的方法来实现这一点。

(P.S。我在前端使用 Angular JS。我只是将实体资源 JSON 附加到范围,并使用 symfony 表单模板生成自动生成的表单字段绑定到范围的正确对象)

定义应从 FOS returned 的内容的标准方法是使用序列化程序组和 Symfony 序列化程序组件或 JMS 序列化程序。

在这两种情况下,您都在实体属性上定义组:

// in the entity
use Symfony\Component\Serializer\Annotation\Groups;

class Story
{
    /**
     * @Groups({"story"})
     *
     * @var int
     */
    private $id;

然后:

 // in the controller
 * @Rest\View(serializerGroups={"story"})
 * @Rest\Route("stories")
 *
 * @return Story[]
 */
public function getStoriesAction()

这将 return 您一个或多个具有与公开的控制器序列化程序组匹配的属性的对象。