在Symfony中validation没有表单的实体2
我正在为Symfony 2创build一个REST API控制器。我开始使用SensioGeneratorBundle创build一个CRUD,并将控制器修改为REST控制器。 但是,我没有表格,所以我正在考虑删除这部分。
我怎样才能确认我的领域没有forms? 一切都连接到表单,我想要一些自由,包括自定义字段名称。 例如,POST x和y字段被Symfony解释为标题和内容。
说实话,表单与validation没有直接关系。 让我解释一下。
表单组件负责映射从客户端接收的数据,无论是GET还是POST数据。 因此,它会将string映射到代码的对象(如果不绑定到实体,则可以是数组)。
在数据被映射到实体之后,表单使用validation器组件来validation实体。 这意味着实体的validation与表单组件完全分离。 所以,当表单被validation时,它确实意味着表单组件validation您的实体而不是表单数据。 被validation的是实体,而不是forms。
该表单仅用于获取string表示并将其映射到实体层次结构。 文档反映了这一点, 表格和validation是symfony 书的不同部分。
这就是说,这也意味着实体的validation可以非常容易地在表单组件之外完成。 你定义你的constaints作为注释或者在外部文件(yml,php或xml)中,并使用validation器组件来validation你的实体。 这里是从本书的validation部分取得的代码示例:
use Symfony\Component\HttpFoundation\Response; use Acme\BlogBundle\Entity\Author; // ... public function indexAction() { $author = new Author(); // ... do something to the $author object $validator = $this->get('validator'); $errors = $validator->validate($author); if (count($errors) > 0) { return new Response(print_r($errors, true)); } else { return new Response('The author is valid! Yes!'); } }
正如你所看到的,这里没有任何forms,只有一个对象和validation器服务。 而且,Symfony2的validation组件是完全独立的。 这意味着你可以在没有整个框架的情况下使用它。 这就是说,单独使用时,你很容易与其他东西集成。
这样,您的REST服务就会接收参数,从中创build实体并使用validation器服务来validation其完整性。 使用表单不是强制性的validation实体。