我正在使用symfony2中的fosrestbundle提供休息服务。
当前我的控制器在请求资源时返回实体(例如/users/40
)。前端包含一个允许操纵此资源并使用put将其发送回去的表单。控制器使用表单处理数据。
我的问题是,该表格的字段少于整个实体(id
和password_hash
是一个很好的示例)。我得出的结论是,将整个实体发送给客户是个坏主意。相反,我希望FosrestBundle仅发送可在表格中避免的实体字段。
所以我只是尝试了:
return $this->createForm(UserType::class, $entity);
fosrestbundle从服务器返回的JSON结构看起来很好。但不幸的是它不包含值。
当然不是 - 表单不绑定。在这一点上,绑定数据是没有意义的。因此,我需要找到另一个解决方案。
在我的应用程序中,此用例将非常普遍。所以我想知道是否没有简单/标准的方法来实现这一目标。
(p.s。我在前端中使用Angular JS。我只是将实体资源JSON附加到范围上,并使用Symfony form模板生成形式字段,该字段自动绑定到范围的正确对象)
定义应该从fos返回的内容的标准方法是使用序列化器组和Symfony Serialializer组件或JMS Serialializer。
在两种情况下,您都在实体属性上定义组:
// in the entity
use SymfonyComponentSerializerAnnotationGroups;
class Story
{
/**
* @Groups({"story"})
*
* @var int
*/
private $id;
,然后:
// in the controller
* @RestView(serializerGroups={"story"})
* @RestRoute("stories")
*
* @return Story[]
*/
public function getStoriesAction()
将返回您的对象或对象,其属性与控制器序列化器组相匹配。