Symfony2 - 如何在Api和Client / Frontend之间共享/重用表单,实体和验证

时间:2015-08-13 17:32:03

标签: php api rest symfony

我真的很喜欢一个指针,有关如何在后端API和其他一些前端/客户端代码之间重用表单类型,实体(对象)和验证约束的经验的答案。

Specificaly: 我有一个托管实体让我们说Product.php。 ProductType.php,包含validation.yml中实体的表单定义和验证规则。

我把它们放到单独的存储库中,并在我的Api和客户端代码中使用composer来要求它们。 Api的响应将是序列化的Product对象。在客户端,我会从json反序列化到同一个产品,但这次没有访问任何数据库层,例如。一个不受管理的普通对象。

所以问题是,是否有人设法在类似的设置中重用这些组件,或者指向一些资源如何管理它? 用例将是:目标代码的集中位置。更快的客户端实施等。

到目前为止,我偶然发现的主要问题是如何在实体/选择类型中管理与表单中定义的关系,因为实体类型需要通过doctrine来管理对象。选择类型不知道如何使用对象数组作为选择。

这是不值得的,或者更好的是在api和客户端都有几乎相同的代码?

示例对象如下: `

 public function buildForm(FormBuilderInterface $builder, array $options)
 {
    $builder->add('name', 'text')
            ->add('price', 'text')

            // use PRE_SET_DATA EVENT to determine if entity or choice here
            // this should be used on the server side, with access to db
            ->add('tags', 'entity', [
                'class'        => 'Acme\MyBundle\Tag',
                'multiple'     => true
             ]);
            // This should be used in the client, without access to db
            //->add('tags', 'choice', [
            //    'data_class' => 'Acme\MyBundle\Tag',
            //    'choices'    => $arrayOfTagObjects,
            //    'multiple'   => true
            // ]);
}

} `

0 个答案:

没有答案