Symfony2 FOSRestBundle返回表单中包含的实体字段

时间:2016-06-16 13:23:10

标签: rest symfony fosrestbundle symfony2-forms

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

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

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

所以我试过了:

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

FOSRestBundle从服务器返回的JSON结构看起来非常好。但不幸的是,它并没有包含价值观。

当然,它没有 - 形式没有约束。在这一点上,绑定数据是没有意义的。因此,我需要找到另一种解决方案。

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

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

1 个答案:

答案 0 :(得分:1)

定义从FOS返回的内容的标准方法是使用序列化程序组以及Symfony序列化程序组件或JMS序列化程序。

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

Select name,
(select count(*) from family_members where family_members.id = family_names.id) as count
FROM family_names;

然后:

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

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

这将返回一个或多个对象,其属性与暴露的控制器序列化程序组匹配。