首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Symfony 2中验证没有表单的实体

在Symfony 2中验证没有表单的实体
EN

Stack Overflow用户
提问于 2012-04-26 06:33:58
回答 1查看 23.6K关注 0票数 45

我正在为Symfony 2创建REST API控制器,我开始使用SensioGeneratorBundle来创建CRUD,并将控制器修改为充当REST控制器。但是,我没有表单,所以我正在考虑删除这一部分。

如何在没有表单的情况下验证字段?一切都连接到表单,我想要一些自由,包括自定义字段名称。例如,Symfony将POST x和y字段解释为title和content。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-26 11:19:18

事实上,表单与验证没有直接关系。让我来解释一下。

表单组件负责映射从客户端接收的数据,无论是GET数据还是POST数据。因此,它会将字符串映射到您代码的对象(如果没有绑定到实体,则可以是一个数组)。

表单使用验证器组件在数据映射到实体后对其进行验证。这意味着实体的验证与表单组件完全解耦。因此,当表单被验证时,这实际上意味着表单组件验证了您的实体,而不是表单数据。验证的是实体,而不是表单。

表单仅用于获取字符串表示并将其映射到实体层次结构。文档反映了这一点,因为FormValidation是symfony book的不同部分。

也就是说,这也意味着实体的验证可以很容易地在表单组件之外完成。您可以将constaints定义为注释或外部文件(yml、php或xml),并使用验证器组件来验证您的实体。下面是摘自本书Validation部分的代码示例:

代码语言:javascript
运行
复制
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服务接收参数,从参数创建实体,并使用验证器服务来验证它们的完整性。验证实体时不一定要使用该表单。

票数 86
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10324782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档