我正在为Symfony 2创建REST API控制器,我开始使用SensioGeneratorBundle来创建CRUD,并将控制器修改为充当REST控制器。但是,我没有表单,所以我正在考虑删除这一部分。
如何在没有表单的情况下验证字段?一切都连接到表单,我想要一些自由,包括自定义字段名称。例如,Symfony将POST x和y字段解释为title和content。
发布于 2012-04-26 11:19:18
事实上,表单与验证没有直接关系。让我来解释一下。
表单组件负责映射从客户端接收的数据,无论是GET数据还是POST数据。因此,它会将字符串映射到您代码的对象(如果没有绑定到实体,则可以是一个数组)。
表单使用验证器组件在数据映射到实体后对其进行验证。这意味着实体的验证与表单组件完全解耦。因此,当表单被验证时,这实际上意味着表单组件验证了您的实体,而不是表单数据。验证的是实体,而不是表单。
表单仅用于获取字符串表示并将其映射到实体层次结构。文档反映了这一点,因为Form和Validation是symfony book的不同部分。
也就是说,这也意味着实体的验证可以很容易地在表单组件之外完成。您可以将constaints定义为注释或外部文件(yml、php或xml),并使用验证器组件来验证您的实体。下面是摘自本书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!');
}
}
如您所见,这里没有涉及表单,只有一个对象和验证器服务。此外,Symfony2的验证组件是完全独立的。这意味着你可以在没有整个框架的情况下使用它。也就是说,当单独使用时,你会失去与其他东西的良好集成。
这样,您的REST服务接收参数,从参数创建实体,并使用验证器服务来验证它们的完整性。验证实体时不一定要使用该表单。
https://stackoverflow.com/questions/10324782
复制相似问题