我在Symfony2中使用FOSRestBundle来提供REST服务。
目前,我的控制器在请求资源时返回实体(例如/users/40
)。
前端包含一个表单,允许操作此资源并使用PUT将其发回。控制器使用表单来处理数据。
我的问题是,表单的字段数少于整个实体(id
和password_hash
是很好的例子)。我得出结论,将整个实体发送给客户是一个坏主意。相反,我希望FOSRestBundle只发送表单中可用的实体字段。
所以我试过了:
return $this->createForm(UserType::class, $entity);
FOSRestBundle从服务器返回的JSON结构看起来非常好。但不幸的是,它并没有包含价值观。
当然,它没有 - 形式没有约束。在这一点上,绑定数据是没有意义的。因此,我需要找到另一种解决方案。
这个用例在我的应用程序中很常见。所以我想知道是否没有简单/标准的方法来实现这一点。
(P.S。我在前端使用Angular JS。我只是将实体资源JSON附加到作用域并使用symfony表单模板生成表单字段,这些字段自动绑定到作用域的正确对象)
答案 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;
这将返回一个或多个对象,其属性与暴露的控制器序列化程序组匹配。