Symfony2 FOSRestBundle return 实体字段包含在表单中
Symfony2 FOSRestBundle return entity fields contained in form
我在 Symfony2 中使用 FOSRestBundle 来提供 REST 服务。
目前我的控制器 returns 请求资源时的实体(例如 /users/40
)。
前端包含一个表单,允许操作此资源并使用 PUT 将其发回。控制器使用表单处理数据。
我的问题是,表单的字段少于整个实体的字段(id
和 password_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 您一个或多个具有与公开的控制器序列化程序组匹配的属性的对象。
我在 Symfony2 中使用 FOSRestBundle 来提供 REST 服务。
目前我的控制器 returns 请求资源时的实体(例如 /users/40
)。
前端包含一个表单,允许操作此资源并使用 PUT 将其发回。控制器使用表单处理数据。
我的问题是,表单的字段少于整个实体的字段(id
和 password_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 您一个或多个具有与公开的控制器序列化程序组匹配的属性的对象。