首页 > php教程 > php手册 > 正文

Symfony数据校验方法实例分析

php中文网
发布: 2016-06-06 20:12:01
原创
1220人浏览过

这篇文章主要介绍了Symfony数据校验方法,实例分析了Symfony数据校验的常见技巧与注意事项,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了symfony数据校验方法。分享给大家供大家参考。具体分析如下:

校验在web应用程序中是一个常见的任务。数据输入到表单需要被校验。数据在被写入数据库之前或者传入一个webservice时也需要被校验。

Symfony2 配备了一个Validator 组件,它让校验工作变得简单易懂。该组件是基于JSR303 Bean校验规范。一个Java规范用在PHP中。

基本验证

理解校验的最好方法是看它的表现。首先,假设你已经创建了一个用于你应用程序某个地方的PHP对象。

复制代码 代码如下:

//src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;

class Author
{
    public $name;
}

到现在为止,它只是个服务于你应用程序的某些目的的普通的类。而校验的目的就是要告诉你对象的数据是否合法。为了这个目的,你需要配置一个对象必须遵守规则或者约束列表来让自己的数据合法。这些规则可以被描述成多种不同的格式的(比如,YAML,XML,类声明或者PHP)。比如,我们保证属性$name不能为空,来添加下面的规则:

YAML格式:

复制代码 代码如下:

# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
    properties:
         name:
            - NotBlank: ~


类声明格式:

复制代码 代码如下:

// src/Acme/BlogBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
   /**
    * @Assert\NotBlank()
    */
    public $name;
}

XML格式:

复制代码 代码如下:



    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping ">

   
       
           
       

   

PHP代码格式:

复制代码 代码如下:

// src/Acme/BlogBundle/Entity/Author.php

use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;

class Author
{
   public $name;
  
   public static function loadValidatorMetadata(ClassMetadata $metadata)
   {
       $metadata->addPropertyConstraint('name', new NotBlank());
   }
}

Protected和private属性以及getter方法也都可以被校验。

使用validator服务:

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版 525
查看详情 动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

接下来,使用validator服务的validate方法来真正的校验Author对象。 validator的工作很简单:读取一个类的约束规则来校验一个对象的数据是否符合这些规则约束。如果校验失败,一个错误数组将被返回。现在我们在一个controller中来执行它:

复制代码 代码如下:

use Symfony\Component\HttpFoundation\Response;
use Acme\BlogBundle\Entity\Author;
//...

public function indexAction()
{
   $author = new Author();
   //... 对$auother对象做些什么
  
   $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!');
   }
}

如果$name 属性为空,你将看到下面的错误信息:

Acme\BlogBundle\Author.name:
     This value should not be blank

如果你为$name属性插入一个值,那么你会获得快乐的成功信息。

大多数时候,你不需要直接跟validator服务交流或者根本不需要担心打印出错误来。

大多数情况下,你将在处理提交表单数据时间接使用校验。

你也可以传递一个错误信息集合到一个模版:

复制代码 代码如下:

if(count($errors)>0){
   return $this->render('AcmeBlogBundle:Author:validate.html.twig',array(
        'errors' => $errors,
   ));
}else{
  //...
}

在模版中,你可以根据需要精确的输出错误列表:

Twig格式:

复制代码 代码如下:

{# src/Acme/BlogBundle/Resources/views/Author/validate.html.twig #}

The author has the following errros



    {% for error in errors %}
       
  • {{ error.message }}

  • {% endfor %}

校验和表单

validator服务可以被用于任何时候校验任何对象。 事实上,你将经常在处理表单时间接使用validator。Symfony的表单类库间接使用validator服务来在数据被提交和绑定后校验底层对象。对象违反约束信息将被转化到FieldError对象,该对象可以很容易的被展示在你的表单中。在一个controller中的传统表单提交流程如下:

复制代码 代码如下:

use Acme\BlogBundle\Entity\Author;
use Acme\BlogBundle\Form\AuthorType;
use Acme\Component\HttpFoundation\Request;
//...

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号