spr*_*ain 14 validation symfony
我有一个包含多个字段的实体.其中一个在提交表格后得到验证如下:
/**
* @var integer $anzahl
*
* @ORM\Column(name="anzahl", type="integer")
* @Assert\NotBlank(message="Bitte geben Sie eine Kistenanzahl an.")
* @Assert\Type(type="numeric", message="Die Kistenanzahl muss eine Zahl sein.")
* @Assert\Min(limit="1", message="Sie müssen mindestens eine Kiste suchen oder anbieten.")
*/
private $anzahl;
Run Code Online (Sandbox Code Playgroud)
我有这个解决方案的两个问题:
只接受大于零的整数值.但是,此验证还接受浮动/双打.但是,如果我更改@Assert\Type(type="numeric")
为@Assert\Type(type="integer")
no输入被验证为true.如何验证输入是否为整数值?
另一个问题是,在输入明显无效的值(如字母串)后,我不仅会收到类型验证的德语错误消息,还会收到英文消息"此值应为有效数字".这条消息来自哪里,如何摆脱它?
小智 21
你应该使用:
@Assert\Type(type="integer")
Run Code Online (Sandbox Code Playgroud)
但要小心,你应该使用它IntegerType
,而不是a NumberType
或a TextType
:
Symfony\Component\Form\Extension\Core\Type\IntegerType
Run Code Online (Sandbox Code Playgroud)
IntegerType
NumberType
除了它集成了适当的数据转换器之外,它是完全相同的.
Ton*_*ibb 11
这对我有用:
->add('field_name', 'integer', array(
'label' => 'Your label here',
'data' => 0, // default value
'precision' => 0, // disallow floats
'constraints' => array(
new Assert\NotBlank(),
new Assert\Type('integer'),
new Assert\Regex(array(
'pattern' => '/^[0-9]\d*$/',
'message' => 'Please use only positive numbers.'
)
),
new Assert\Length(array('max' => 2))
)
))
Run Code Online (Sandbox Code Playgroud)
小智 9
如果字段类型应该是字符串,则可以使用此字符:
/**
* @Assert\Type(type="digit")
*/
Run Code Online (Sandbox Code Playgroud)
虽然没有提到的文件中,TypeValidator
也利用ctype_*
功能.
见\Symfony\Component\Validator\Constraints\TypeValidator
:
public function validate($value, Constraint $constraint)
{
...
$ctypeFunction = 'ctype_'.$type;
...
} elseif (function_exists($ctypeFunction) && call_user_func($ctypeFunction, $value)) {
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用
/**
* @Assert\Regex(pattern="/\d+/")
*/
Run Code Online (Sandbox Code Playgroud)
或创建验证器ctype_digit
.
归档时间: |
|
查看次数: |
30581 次 |
最近记录: |