0

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

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

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

所以我只是尝试:

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

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

当然,它没有 - 表单没有绑定。而此时绑定数据是没有意义的。因此,我需要找到另一种解决方案。

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

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

4

1 回答 1

1

定义 FOS 应该返回什么的标准方法是使用序列化程序组和 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()

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

于 2016-06-16T19:11:17.833 回答