表达式
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.3,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.3(当前的稳定版本)。
表达式
这个约束允许您使用一个表达式对于更复杂的、动态验证。看到基本用法了一个例子。看到回调不同的约束,给你类似的灵活性。
基本用法
想象你有一个类博客
与类别
和isTechnicalPost
属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25
/ / src / AppBundle /模型/ BlogPost.php名称空间AppBundle\模型;使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;类博客{私人美元类别;私人美元isTechnicalPost;/ /……公共函数getCategory(){返回美元这- >类别;}公共函数setIsTechnicalPost(美元isTechnicalPost){美元这- >isTechnicalPost =美元isTechnicalPost;}/ /……}
验证对象,你有一些特殊的要求:
-
)如果
isTechnicalPost
是真的,那么类别
必须是php
-
或
欧宝娱乐app下载地址
;
B)如果isTechnicalPost
是假的,那么类别
可以是任何东西。
做到这一点的方法之一是表达式约束:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / AppBundle /模型/ BlogPost.php名称空间AppBundle\模型;使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;/ * * *@Assert\表达式(*”this.getCategory () (php, symfony的)或! th欧宝娱乐app下载地址is.isTechnicalPost ()*消息=“如果这是一个技术文章,类别应该php或symfony !”欧宝娱乐app下载地址* ) */< /span>类博客{/ /……}
1 2 3 4 5 6
# src / AppBundle /资源/ config / validation.ymlAppBundle \模型\博客:约束:- - - - - -表达式:表达式:“this.getCategory () (php, symfo欧宝娱乐app下载地址ny的)或! this.isTechnicalPost ()信息:“如果这是一个技术文章,类别应该php或symfony !”欧宝娱乐app下载地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< !- - - - - -- - - - - -src/AppBundle/Resources/config/validation.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><constraint-mappingxmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/constraint-mapping”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/constraint-mapping //www.oldmanjams.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd”><类的名字=“AppBundle \模型\博客”><约束的名字=“表情”><选项的名字=“表情”>this.getCategory () (php, symfo欧宝娱乐app下载地址ny的)或! this.isTechnicalPost ()< /选项><选项的名字=“消息”>如果这是一个技术文章,类别应该php或symfony !欧宝娱乐app下载地址< /选项>< /约束>< /类>< /constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src / AppBundle /模型/ BlogPost.php名称空间AppBundle\模型;使用欧宝娱乐app下载地址\组件\验证器\映射\ClassMetadata;使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;类博客{公共静态函数loadValidatorMetadata(ClassMetadata美元元数据){美元元数据- >addConstraint (新维护\表达式(数组(“表情”= >“this.getCategory () (“php”,“sym欧宝娱乐app下载地址fony”)或! this.isTechnicalPost ()”,“消息”= >“如果这是一个技术文章,类别应该php或symfony !”欧宝娱乐app下载地址)));}/ /……}
的表达式选项的表达式必须返回true为了验证通过。了解更多关于表达式语言语法,看表达式语法。
误差映射到一个特定的领域
你也可以约束附加到一个特定的属性和仍然验证基于整个实体的值。这是非常方便的,如果你想把错误到一个特定的领域。在这种背景下,价值
代表的价值isTechnicalPost
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src / AppBundle /模型/ BlogPost.php名称空间AppBundle\模型;使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;类博客{/ /……/ * * *@Assert\表达式(*”this.getCategory () (php, symfony的)或价值= 欧宝娱乐app下载地址= false”, *消息=“如果这是一个技术文章,类别应该php或symfony !”* ) */< /span>私人美元isTechnicalPost;/ /……}
1 2 3 4 5 6 7
# src / AppBundle /资源/ config / validation.ymlAppBundle \模型\博客:属性:isTechnicalPost:- - - - - -表达式:表达式:“this.getCategory () (php, symfo欧宝娱乐app下载地址ny的)或价值= = false”信息:“如果这是一个技术文章,类别应该php或symfony !”欧宝娱乐app下载地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
< !- - - - - -- - - - - -src/AppBundle/Resources/config/validation.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><constraint-mappingxmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/constraint-mapping”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/constraint-mapping //www.oldmanjams.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd”><类的名字=“AppBundle \模型\博客”><财产的名字=“isTechnicalPost”><约束的名字=“表情”><选项的名字=“表情”>this.getCategory () (php, symfo欧宝娱乐app下载地址ny的)或价值= = false< /选项><选项的名字=“消息”>如果这是一个技术文章,类别应该php或symfony !欧宝娱乐app下载地址< /选项>< /约束>< /财产>< /类>< /constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src / AppBundle /模型/ BlogPost.php名称空间AppBundle\模型;使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;使用欧宝娱乐app下载地址\组件\验证器\映射\ClassMetadata;类博客{公共静态函数loadValidatorMetadata(ClassMetadata美元元数据){美元元数据- >addPropertyConstraint (“isTechnicalPost”,新维护\表达式(数组(“表情”= >“this.getCategory () (“php”,“sym欧宝娱乐app下载地址fony”)或价值= = false ',“消息”= >“如果这是一个技术文章,类别应该php或symfony !”欧宝娱乐app下载地址)));}/ /……}
更多的信息表达和哪些变量是可用的,看到的表达式选择下面的细节。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。