附录B -验证器
介绍
symfob娱乐下载ony框架形式是捆绑了很多有用的验证器。这些确认器覆盖大多数项目的共同需求。这一章描述了默认表单验证器绑定symfony。ob娱乐下载我们还包括的验证器sfPropelPlugin
,sfDoctrinePlugin
插件,这些插件支持的核心团队,包含一些非常有用的验证器。
提示
即使你不使用symfony的MVC框架,您可以使用验ob娱乐下载证器中定义sfFormExtraPlugin
,sfPropelPlugin
,sfDoctrinePlugin
插件的验证器/
目录在您的项目。
在深入每一个验证器细节之前,让我们看看验证器的共同点。
的sfValidatorBase
基类
symfob娱乐下载ony的验证器继承sfValidator
基类,它提供了一些默认的特性验证器。
验证器有两个目标:清洗和验证一个污染值。
当创建一个验证器,你可以通过选择和错误消息作为参数:
v美元=新sfValidatorString(数组(“要求”= >真正的),数组(“要求”= >这个值是必需的。));
选择和错误消息也可以通过设置setoption ()
和setMessages ()
方法:
v美元=新sfValidatorString();v美元- >setoption(数组(“要求”= >真正的));v美元- >setMessages(数组(“要求”= >这个值是必需的。));
的setOption ()
和setMessage ()
方法允许设置一个选项或错误消息:
v美元=新sfValidatorString();v美元- >setOption(“要求”,真正的);v美元- >setMessage(“要求”,这个值是必需的。);
污染值可以通过调用进行验证清洁()
方法:
美元的清洁=v美元- >清洁(“名字”,“价值”,数组(“类”= >“foo”));
的清洁()
方法以污染值作为参数并返回清除值。如果发生验证错误,sfValidatorError
抛出。
请注意
验证器是无状态的,这意味着一个验证器实例可以验证你想要尽可能多的输入值。
定义的缺省选项sfValidatorBase
是以下:
选项 | 错误 | 描述 |
---|---|---|
要求 |
要求 |
真正的 如果该值是必需的,假 否则(真正的 默认情况下) |
修剪 |
n /一个 | 真正的 如果该值必须修剪,假 否则(假 默认情况下) |
empty_value |
n /一个 | 空值时返回值不是必需的 |
默认定义的错误消息sfValidatorBase
是以下:
错误 | 描述 |
---|---|
要求 |
错误消息时使用所需的污染值是空的,(必需的。 默认情况下)。 |
无效的 |
一个通用的错误消息时发生错误(无效的。 默认情况下)。 |
您可以更改默认字符串使用的要求
和无效的
通过调用错误消息setDefaultMessage ()
方法。这些基础验证器之前必须设置加载,例如通过使用设置()
方法:
公共函数设置(){sfValidatorBase::setDefaultMessage(“要求”,这个值是必需的。);sfValidatorBase::setDefaultMessage(“无效”,这个值是无效的。);父::设置();}
错误消息可以包含占位符。一个占位符是一个字符串之间的封闭%
。在运行时替换占位符。所有错误消息获得的污染值%值%
占位符。每个错误消息还可以定义特定的占位符。
请注意
在下一节中,默认值%值%
占位符没有提及,因为它总是可用的。
一些验证器需要知道使用的字符集被污染的价值。默认字符集utf - 8
,但它可以通过调用配置setCharset ()
方法:
sfValidatorBase::setCharset(“iso - 8859 - 1”);
请注意
如果你使用symfony的syob娱乐下载mfony验证器MVC框架,字符集是自动设置的字符集settings.yml
。
验证器模式
一个验证器模式是一个或几个其他的包装验证器验证器。
当发生错误时,会抛出一个验证器模式sfValidatorErrorSchema
例外。
在下一节中,验证器已经重新集结成类别。
验证器
sfValidatorString
sfValidatorRegex
sfValidatorEmail
sfValidatorUrl
sfValidatorInteger
sfValidatorNumber
sfValidatorBoolean
sfValidatorChoice
sfValidatorPass
sfValidatorCallback
sfValidatorDate
sfValidatorTime
sfValidatorDateTime
sfValidatorDateRange
sfValidatorFile
sfValidatorAnd
sfValidatorOr
sfValidatorSchema
sfValidatorSchemaCompare
sfValidatorSchemaFilter
sfValidatorI18nChoiceCountry
sfValidatorI18nChoiceLanguage
sfValidatorI18nTimezone
sfValidatorPropelChoice
sfValidatorPropelUnique
sfValidatorDoctrineChoice
sfValidatorDoctrineUnique
简单的验证器
sfValidatorString
模式验证器:不
的sfValidatorString
验证器验证字符串并将污染值转换成一个字符串。
选项 | 错误 | 描述 |
---|---|---|
max_length |
max_length |
字符串的最大长度 |
min_length |
min_length |
最小长度的字符串 |
错误 | 占位符 | 默认值 |
---|---|---|
max_length |
max_length |
“%值%”太长(% max_length %字符max)。 |
min_length |
min_length |
“%值%”太短(% min_length %字符min)。 |
谨慎
这个验证器要求mb_string
扩展安装正确工作。如果安装,字符串长度的计算mb_strlen ()
函数;如果不是,它使用strlen ()
函数,该函数不返回的字符串长度如果非ascii字符的字符串。
sfValidatorRegex
模式验证器:不
的sfValidatorRegex
验证器验证字符串正则表达式。
选项 | 错误 | 描述 |
---|---|---|
模式 |
无效的 |
PCRE正则表达式模式,或的一个实例sfCallable 返回一个正则表达式 |
must_match |
无效的 |
如果设置为假 正则表达式不能匹配,验证器 |
sfValidatorEmail
模式验证器:不
的sfValidatorEmail
验证器可以验证电子邮件。它继承自sfValidatorRegex
。
sfValidatorUrl
模式验证器:不
的sfValidatorUrl
验证器可以验证HTTP和FTP url。它继承自sfValidatorRegex
。
选项 | 错误 | 描述 |
---|---|---|
协议 |
无效的 |
协议允许。默认值:阵列(http, https, ftp, ftp) |
sfValidatorInteger
模式验证器:不
的sfValidatorInteger
验证器验证一个整数,将污染值转换为一个整数。
选项 | 错误 | 描述 |
---|---|---|
马克斯 |
马克斯 |
接受的最大整数 |
最小值 |
最小值 |
接受的最小整数 |
错误 | 占位符 | 默认值 |
---|---|---|
马克斯 |
马克斯 |
“% %”价值必须小于%马克斯%。 |
最小值 |
最小值 |
“% %”价值必须大于%分钟%。 |
默认的无效的
错误消息“%值%”不是一个整数。
。
sfValidatorNumber
模式验证器:不
的sfValidatorNumber
验证器验证号码(一个字符串,PHP是能够理解的floatval ()
函数)和污染值转换为一个浮点数。
选项 | 错误 | 描述 |
---|---|---|
马克斯 |
马克斯 |
接受的最大数量 |
最小值 |
最小值 |
接受的最低数量 |
错误 | 占位符 | 默认值 |
---|---|---|
马克斯 |
马克斯 |
“% %”价值必须小于%马克斯%。 |
最小值 |
最小值 |
“% %”价值必须大于%分钟%。 |
默认的无效的
错误消息“%值%”不是一个数字。
。
sfValidatorBoolean
模式验证器:不
的sfValidatorBoolean
验证器验证一个布尔值,并返回真正的
或假
。
选项 | 错误 | 描述 |
---|---|---|
true_values |
n /一个 | 真值的列表(默认情况下:真正的 ,t ,是的 ,y ,在 ,1 ) |
false_values |
n /一个 | 错误的列表值(默认情况下:假 ,f ,没有 ,n ,从 ,0 ) |
sfValidatorChoice
模式验证器:不
的sfValidatorChoice
验证器验证如果污染值是一个预期值列表。
选项 | 错误 | 描述 |
---|---|---|
选择 |
n /一个 | 预期值的数组(必需) |
多个 |
n /一个 | 真正的 如果选择标签必须允许多个值 |
最小值 |
n /一个 | 需要选择的最小数量的值(如果多个 是真的) |
马克斯 |
n /一个 | 需要选择的值的最大数量(如果多个 是真的) |
请注意
比较完成后污染值已经雇到一个字符串。
sfValidatorPass
模式验证器:不
的sfValidatorPass
验证器是一个操作来验证器,并返回污染值。
sfValidatorCallback
模式验证器:不
的sfValidatorCallback
验证器代表实际的验证一个PHP回调。
回调传递当前验证器实例,污染(从价值和一个数组参数参数
作为参数选项):
函数constant_validator_callback(美元的验证器,美元的价值,美元的参数){如果(美元的价值! =美元的参数(“不变”]){扔新sfValidatorError(美元的验证器,“无效”);}返回美元的价值;}v美元=新sfValidatorCallback(数组(“回调”= >“constant_validator_callback”,“参数”= >数组(“不变”= >“foo”),));
选项 | 错误 | 描述 |
---|---|---|
回调 |
n /一个 | 一个有效的PHP回调(必需) |
参数 |
n /一个 | 参数数组传递给回调函数 |
日期验证器
sfValidatorDate
模式验证器:不
的sfValidatorDate
验证日期和日期时间(日期时间支持通过设置with_time
选项)。除了验证日期的格式,它可以执行最小和最大有效日期。
验证器接受几个类型的输入:
- 一个数组由以下键:
一年
,月
,一天
,小时
,一分钟
,第二个
- 一个字符串匹配
date_format
如果提供(例如正则表达式一天~ (? P < > \ d {2}) / (? P <月> \ d {2}) / (? P <一> \ d {4}) ~
) - 一个字符串,可以解析的
strtotime ()
PHP函数 - 一个整数代表一个时间戳
污染值是通过应用转换为日期date_output
或datetime_output
格式。
选项 | 错误 | 描述 |
---|---|---|
date_format |
bad_format |
日期必须匹配的正则表达式;注意正则表达式必须使用指定的子模式(? P <一>) |
with_time |
n /一个 | 真正的 如果验证器必须返回一个时间,假 否则 |
date_output |
n /一个 | 时所使用的格式返回日期(默认Y-m-d ) |
datetime_output |
n /一个 | 时所使用的格式返回一个日期和时间(默认Y-m-d H:我:s ) |
date_format_error |
n /一个 | 时所使用的日期格式显示为一个错误bad_format 错误(使用date_format 如果没有提供) |
马克斯 |
马克斯 |
允许的最大日期(如一个时间戳) |
最小值 |
最小值 |
最低允许日期(如一个时间戳) |
date_format_range_error |
n /一个 | 时所使用的日期格式显示最小/最大(默认为一个错误d / Y m / H:我:s ) |
请注意
的date_output
和datetime_output
选项可以使用任何PHP可以理解的格式日期()
函数。
错误 | 占位符 | 默认值 |
---|---|---|
bad_format |
date_format |
“%值%”不匹配日期格式(% date_format %)。 |
最小值 |
最小值 |
日期必须在%分钟%。 |
马克斯 |
马克斯 |
日期必须在%马克斯%。 |
sfValidatorTime
模式验证器:不
的sfValidatorTime
一次验证。
验证器接受几个类型的输入:
- 一个数组由以下键:
小时
,一分钟
,第二个
- 一个字符串匹配
time_format
如果提供的正则表达式 - 一个字符串,可以解析的
strtotime ()
PHP函数 - 一个整数代表一个时间戳
污染值转换为一个时间通过应用time_output
格式。
选项 | 错误 | 描述 |
---|---|---|
time_format |
bad_format |
一个正则表达式,乘以必须匹配 |
time_output |
n /一个 | 时所使用的格式返回时间(默认H:我:s ) |
time_format_error |
n /一个 | 时所使用的格式显示为一个错误bad_format 错误(使用date_format 如果没有提供) |
请注意
的time_output
选项可以使用任何PHP可以理解的格式日期()
函数。
错误 | 占位符 | 默认值 |
---|---|---|
bad_format |
time_format |
“% %”价值与时间格式不匹配(% time_format %)。 |
sfValidatorDateTime
模式验证器:不
的sfValidatorDateTime
验证日期与时间。
这是一个快捷方式:
v美元=新sfValidatorDate(数组(“with_time”= >真正的));
sfValidatorDateRange
模式验证器:不
的sfValidatorDateTime
验证一个日期范围。
选项 | 错误 | 描述 |
---|---|---|
from_date |
无效的 |
从日期验证器(必需) |
to_date |
无效的 |
到目前为止validator(必需) |
的from_date
和to_date
必须的实例验证sfValidatorDate
类。
的无效的
错误消息“% %”价值与时间格式不匹配(% time_format %)。
。
文件验证器
sfValidatorFile
模式验证器:不
的sfValidatorFile
验证器验证一个上传文件。
验证器将上传的文件的一个实例sfValidatedFile
类,或validated_file_class
如果它被设置选项。
选项 | 错误 | 描述 |
---|---|---|
max_size |
max_size |
最大文件大小 |
mime_types |
mime_types |
允许mime类型数组或类别(可用的类别:web_images ) |
mime_type_guessers |
n /一个 | mime类型的数组猜测者PHP调用(或必须返回的mime类型零 ) |
mime_categories |
n /一个 | 数组的mime类型类别(web_images 被定义为默认) |
路径 |
n /一个 | 在哪里保存文件的路径,使用的sfValidatedFile 类(可选) |
validated_file_class |
n /一个 | 类管理清洁上传文件的名称(可选) |
的web_images
mime类型类别包含以下mime类型:
图像/ jpeg
图像/ pjpeg
/ png图像
图像/ x-png
gif图像/
如果mime_types
选项设置,验证器需要一种方法来测试上传文件的mime类型。他们的验证器和三个捆绑在一起:
guessFromFileinfo
:使用finfo_open ()
函数(从Fileinfo
PECL扩展)guessFromMimeContentType
:使用mime_content_type ()
函数(弃用)guessFromFileBinary
:使用文件二进制(只适用在* nix系统)
错误 | 占位符 | 默认值 |
---|---|---|
max_size |
% %大小 ,% max_size % |
文件太大(最大的是% max_size %字节)。 |
mime_types |
% mime_types % ,% mime_type % |
无效的mime类型(% mime_type %)。 |
部分 |
上传文件只有部分上传。 | |
no_tmp_dir |
缺少一个临时文件夹中。 | |
cant_write |
没有写文件到磁盘。 | |
扩展 |
文件上传停止扩展。 |
验证器地图PHP错误如下:
UPLOAD_ERR_INI_SIZE
:max_size
UPLOAD_ERR_FORM_SIZE
:max_size
UPLOAD_ERR_PARTIAL
:部分
UPLOAD_ERR_NO_TMP_DIR
:no_tmp_dir
UPLOAD_ERR_CANT_WRITE
:cant_write
UPLOAD_ERR_EXTENSION
:扩展
逻辑验证器
sfValidatorAnd
模式验证器:不
的sfValidatorAnd
验证器验证污染值如果它通过了验证器的列表。
的sfValidatorAnd
构造函数验证器作为其第一个参数列表:
v美元=新sfValidatorAnd(数组(新sfValidatorString(数组(“max_length”= >255年)),新sfValidatorEmail(),),数组(“halt_on_error”= >真正的),数组(“无效”= >的输入值必须少于255个字符的电子邮件。”));
默认情况下,验证器抛出一个数组的所有嵌入式验证器抛出的错误消息。它也可以抛出一个错误消息,如果无效的
错误消息设置为非空字符串,就像上面的例子所示。
选项 | 错误 | 描述 |
---|---|---|
halt_on_error |
n /一个 |
是否停止第一个错误(假 默认情况下) |
验证器的顺序是重要的如果halt_on_error
选项设置为真正的
。
嵌入式的验证器列表也可以通过使用管理getValidators ()
和addValidator ()
方法。
sfValidatorOr
模式验证器:不
的sfValidatorOr
验证器验证污染值如果它通过至少一个验证器从一个列表中。
的sfValidatorOr
构造函数验证器作为其第一个参数列表:
v美元=新sfValidatorOr(数组(新sfValidatorRegex(数组(“模式”= >' /\。com /美元”)),新sfValidatorEmail(),),数组(),数组(“无效”= >输入值的。com域或一个有效的电子邮件地址。));
默认情况下,验证器抛出一个数组的所有嵌入式验证器抛出的错误消息。它也可以抛出一个错误消息,如果无效的
错误消息设置为非空字符串,就像上面的例子所示。
嵌入式的验证器列表也可以通过使用管理getValidators ()
和addValidator ()
方法。
sfValidatorSchema
模式验证器:是的
的sfValidatorSchema
验证器是一个由几个字段验证器。一个字段只是一个名叫验证器:
v美元=新sfValidatorSchema(数组(“名字”= >新sfValidatorString(),“国家”= >新sfValidatorI18nChoiceCountry(),));
请注意
被定义为一种形式的模式验证器类sfValidatorSchema
。
这个验证器只接受一个数组作为输入值和抛出一个InvalidArgumentException
如果不是这种情况。
的验证器可以pre-validator之前执行其他验证器,和一个post-validator毕竟兴味值上执行其他验证器。
pre-validator和post-validator验证器模式,接收所有的值。他们可以设置setPreValidator ()
和setPostValidator ()
方法:
v美元- >setPostValidator(新sfValidatorSchemaCompare(“密码”,“= =”,“password_again”));
选项 | 错误 | 描述 |
---|---|---|
allow_extra_fields |
extra_fields |
如果假 ,验证器添加一个错误如果额外的字段输入数组的值(默认假 ) |
filter_extra_fields |
n /一个 | 如果真正的 ,额外的字段验证器过滤器清洗返回数组的值(默认真正的 ) |
错误 | 占位符 | 默认值 |
---|---|---|
extra_fields |
%领域% |
意想不到的额外的表单字段名为“% %”。 |
post_max_size |
不能处理表单提交。这可能意味着你有上传的文件太大了。 |
的sfValidatorSchema
可以作为一个数组访问嵌入式验证器:
对美元=新sfValidatorSchema(数组(“名字”= >新sfValidatorString()));nameValidator美元=对美元(“名字”];设置(对美元(“名字”]);
您可以访问嵌入式验证器模式验证器通过使用数组表示法:
对美元(“作者”](“first_name”]- >setMessage(“无效”,的第一个名字是无效的。);
的post_max_size
如果提交的数据量则会引发错误超过一种形式post_max_size
价值的php . ini
文件。
sfValidatorSchemaCompare
模式验证器:是的
的sfValidatorSchemaCompare
验证器比较几个值从给定的污染值数组:
v美元=新sfValidatorSchemaCompare(“密码”,“= =”,“password_again”);
选项 | 错误 | 描述 |
---|---|---|
left_field |
n /一个 | 左边字段名 |
操作符 |
n /一个 | 比较操作符 |
right_field |
n /一个 | 正确的字段名 |
throw_global_error |
n /一个 | 是否要把全球错误(假 默认情况下)或者一个错误绑定到左外野 |
可用的运算符是:
sfValidatorSchemaCompare:: =
或= =
sfValidatorSchemaCompare:相同
或= = =
sfValidatorSchemaCompare: NOT_EQUAL
或! =
sfValidatorSchemaCompare: NOT_IDENTICAL
或= = !
sfValidatorSchemaCompare: LESS_THAN
或<
sfValidatorSchemaCompare: LESS_THAN_EQUAL
或< =
sfValidatorSchemaCompare: GREATER_THAN
或>
sfValidatorSchemaCompare: GREATER_THAN_EQUAL
或> =
默认情况下,验证器抛出一个全球错误。如果throw_global_error
被设置为真正的
左外野的抛出一个错误。
的无效的
错误消息接受下列值:% left_field %
,% right_field %
,%运算符%
。
sfValidatorSchemaFilter
模式验证器:是的
的sfValidatorSchemaFilter
验证器将non-schema验证器转换为模式验证器。它有时是有用的在验证器上下文:
v美元=新sfValidatorSchema();v美元- >setPostValidator(新sfValidatorSchemaFilter(“电子邮件”,新sfValidatorEmail()));
I18n验证器
sfValidatorI18nChoiceCountry
模式验证器:不
的sfValidatorI18nChoiceCountry
确认污染值是一个有效的国家ISO 3166编码。
选项 | 错误 | 描述 |
---|---|---|
国家 |
无效的 |
国家代码使用数组(ISO 3166) |
sfValidatorI18nChoiceLanguage
模式验证器:不
的sfValidatorI18nChoiceLanguage
确认污染值是一种有效的语言。
选项 | 错误 | 描述 |
---|---|---|
语言 |
无效的 |
一个数组的语言使用 |
sfValidatorI18nChoiceTimezone
模式验证器:不
的sfValidatorI18nChoiceTimezone
确认污染值是一个有效的时区。
选项 | 错误 | 描述 |
---|---|---|
语言 |
无效的 |
一个数组的语言使用 |
推动验证器
sfValidatorPropelChoice
模式验证器:不
的sfValidatorPropelChoice
验证器验证的污染值列表中记录一个给定的推动模式。
记录的列表可以限制使用标准
选择。
污染值必须记录的主键。这可以通过改变列
选择。
选项 | 错误 | 描述 |
---|---|---|
模型 |
n /一个 | 模型类(必需) |
标准 |
n /一个 | 检索对象时使用的标准 |
列 |
n /一个 | 列名(零 在默认情况下这意味着主键)必须用于字段名称格式 |
连接 |
n /一个 | 推动连接使用(零 默认情况下) |
多个 |
n /一个 | 真正的 如果选择标签必须允许多个选择 |
请注意
这个验证器不工作模型与复合主键。
sfValidatorPropelUnique
模式验证器:是的
的sfValidatorPropelUnique
验证器验证唯一性的一列或一组列(列
为推动模型选项)。
如果独特性几个列,可以扔在全球范围内通过设置错误throw_global_error
选择。
选项 | 错误 | 描述 |
---|---|---|
模型 |
n /一个 | 模型类(必需) |
列 |
n /一个 | 独特的列名在推动字段名称格式(必需)。如果暗金物品几个列,您可以通过一个字段名称数组 |
场 |
n /一个 | 字段名称使用的形式,除了列名 |
primary_key |
n /一个 | 在推动主键列的名字字段名称格式(如果没有提供可选的,将进行自检)。你也可以通过数组如果表有几个主键 |
连接 |
n /一个 | 推动连接使用(零 默认情况下) |
throw_global_error |
n /一个 | 是否要把全球错误(假 默认情况下)或一个错误与第一个字段列选项相关的数组 |
理论验证器
sfValidatorDoctrineChoice
模式验证器:不
的sfValidatorDoctrineChoice
验证器验证的污染值列表中记录一个给定的理论模型。
记录的列表可以限制使用查询
选择。
污染值必须记录的主键。这可以通过改变列
选择。
选项 | 错误 | 描述 |
---|---|---|
模型 |
n /一个 | 模型类(必需) |
别名 |
n /一个 | 根组件查询中使用的别名 |
查询 |
n /一个 | 查询时使用检索对象 |
列 |
n /一个 | 列名(零 在默认情况下这意味着主键)必须用于字段名称格式 |
连接 |
n /一个 | 教义连接使用(零 默认情况下) |
请注意
这个验证器不工作模型与复合主键。
sfValidatorDoctrineUnique
模式验证器:是的
的sfValidatorDoctrineUnique
验证器验证唯一性的一列或一组列(列
选项)的理论模型。
如果独特性几个列,可以扔在全球范围内通过设置错误throw_global_error
选择。
选项 | 错误 | 描述 |
---|---|---|
模型 |
n /一个 | 模型类(必需) |
列 |
n /一个 | 独特的列名在教义字段名称格式(必需)。如果暗金物品几个列,您可以通过一个字段名称数组 |
primary_key |
n /一个 | 主键列名教义字段名称格式(如果没有提供可选的,将进行自检)。你也可以通过数组如果表有几个主键 |
连接 |
n /一个 | 教义连接使用(零 默认情况下) |
throw_global_error |
n /一个 | 是否要把全球错误(假 默认情况下)或一个错误与第一个字段列选项相关的数组 |
这项工作在Creative Commons许可Attribution-Share都3.0 Unported许可执照。