Symfony数据校验方法实例分析
本文实例讲述了Symfony数据校验方法。分享给大家供大家参考。具体分析如下: 校验在web应用程序中是一个常见的任务。数据输入到表单需要被校验。数据在被写入数据库之前或者传入一个webservice时也需要被校验。 Symfony2 配备了一个Validator 组件,它让校验工作变得简单易懂。该组件是基于JSR303 Bean校验规范。一个Java规范用在PHP中。 基本验证理解校验的最好方法是看它的表现。首先,假设你已经创建了一个用于你应用程序某个地方的PHP对象。 代码如下: class Author { public $name; } 到现在为止,它只是个服务于你应用程序的某些目的的普通的类。而校验的目的就是要告诉你对象的数据是否合法。为了这个目的,你需要配置一个对象必须遵守规则或者约束列表来让自己的数据合法。这些规则可以被描述成多种不同的格式的(比如,YAML,XML,类声明或者PHP)。比如,我们保证属性$name不能为空,来添加下面的规则: YAML格式: 代码如下: class Author { /** * @AssertNotBlank() */ public $name; } XML格式: 代码如下: PHP代码格式: 代码如下: use SymfonyComponentValidatorMappingClassMetadata; use SymfonyComponentValidatorConstraintsNotBlank; class Author { public $name; public static function loadValidatorMetadata(ClassMetadata $metadata) Protected和private属性以及getter方法也都可以被校验。 使用validator服务:接下来,使用validator服务的validate方法来真正的校验Author对象。 validator的工作很简单:读取一个类的约束规则来校验一个对象的数据是否符合这些规则约束。如果校验失败,一个错误数组将被返回。现在我们在一个controller中来执行它: 代码如下: public function indexAction() { $author = new Author(); //... 对$auother对象做些什么 $validator = $this->get('validator'); if(count($errors) >0){ return new Response(print_r($errors,true)); }else{ return new Response('The author is valid! Yes!'); } } 如果$name 属性为空,你将看到下面的错误信息: AcmeBlogBundleAuthor.name: This value should not be blank 如果你为$name属性插入一个值,那么你会获得快乐的成功信息。 大多数时候,你不需要直接跟validator服务交流或者根本不需要担心打印出错误来。 大多数情况下,你将在处理提交表单数据时间接使用校验。 你也可以传递一个错误信息集合到一个模版: 代码如下:0){ return $this->render('AcmeBlogBundle:Author:validate.html.twig',array( 'errors' => $errors, )); }else{ //... } 在模版中,你可以根据需要精确的输出错误列表: Twig格式: 代码如下: The author has the following errros
校验和表单validator服务可以被用于任何时候校验任何对象。 事实上,你将经常在处理表单时间接使用validator。Symfony的表单类库间接使用validator服务来在数据被提交和绑定后校验底层对象。对象违反约束信息将被转化到FieldError对象,该对象可以很容易的被展示在你的表单中。在一个controller中的传统表单提交流程如下: 代码如下: public function updateAction(Request $request) { $author = new AcmeBlogBundleEntityAuthor(); $form = $this->createForm(new AuthorType(),$author); if($request->getMethod() =='POST'){ $form->bindRequest($request); if($form->isvalid()){ return $this->render('BlogBundle:Author:form.html.twig',array( 'form' => $form->createView(), )); } 配置:Symfony2 的validator默认情况下是可用的。但是如果你使用了生命方法来指定你的约束,那么你需要显式的开启声明功能: YAML格式: 代码如下: PHP代码格式: 代码如下:loadFromExtension('framework',array('validation'=> array(
'enable_annotations'=>true,
)));
约束规则Validator是设计了用来按照约束规则校验对象的。为了校验一个对象,只需要映射一个或者多个约束到它要校验的类然后把它传递给validator服务即可。 本质上,一个约束就是一个简单的PHP对象,它可以生成一个决断语句。 在现实生活中,一个约束可以是"蛋糕不能烤焦了" 这样的规则约束。在Symfony2中,约束都差不多:他们决断某个条件是否成立。给定一个值,约束会告诉你这个值是否遵守了你的约束规则。 Symfony2 支持的约束规则首先是基础约束规则:使用他们来决断非常基本的事,比如你对象属性的值或者方法的返回值。 NotBlank,Blank,NotNull,Null,True,False,Type 字符串约束:Email,MinLength,MaxLength,Url,Regex,Ip等 数字约束:Max,Min 日期约束:Date,DateTime和Time 集合约束:Choice,Collection,UniqueEntity,Language,Locale和Country等。 文件约束:File,Image 其它约束:Callback,All,Valid 你也可以创建自己的自定义约束。 约束配置:一些约束,比如NotBlank,很简单,但是其它的比如Choice约束,有许多配置项需要设置。假设Author类有另外一个属性,gener可以被设置为”male"或者"female": YAML格式: 代码如下: class Author { /** * @AssertChoice( * choices = {"male","female"}, * message = "Choose a valid gender." * ) */ public $gender; } XML格式: 代码如下: PHP代码格式: 代码如下: class Author { public $gender; public static function loadValidatorMetadata(ClassMetadata $metadata) { $metadata->addPropertyConstraint('gender',new Choice(array( 'choices' => array('male','female'), 'message' => 'Choose a valid gender.', ))); } } 一个约束的选项通常都是通过一个数组来传递的。有些约束也允许你传递一个值。"default"在数组中是可选的。在Choice约束时,choices选项就可以通过这种方式指定。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |