我有一个包含多个字段的实体。其中一个在提交表格后得到验证如下:
/**
* @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;
我在使用此解决方案时遇到两个问题:
只接受大于零的整数值。但是,此验证还接受浮动/双打。但是,如果我将@Assert\Type(type="numeric")
更改为@Assert\Type(type="integer")
,则不会将输入验证为true。如何验证输入是否为整数值?
另一个问题是,在输入明显无效的值(如字母串)后,我不仅会收到类型验证的德语错误消息,还会收到英文消息“此值应为有效数字”。这条消息来自哪里,如何摆脱它?
答案 0 :(得分:20)
您应该使用:
@Assert\Type(type="integer")
但请注意,您应该使用IntegerType
,而不是NumberType
或TextType
:
Symfony\Component\Form\Extension\Core\Type\IntegerType
IntegerType
与NumberType
相同,只是它整合了正确的data transformer。
答案 1 :(得分:10)
这对我有用:
->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))
)
))
答案 2 :(得分:9)
如果字段类型应为字符串,则可以使用此字符:
/**
* @Assert\Type(type="digit")
*/
虽然未提及in the documentation,但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)) {
...
}
答案 3 :(得分:5)
您可以使用
/**
* @Assert\Regex(pattern="/\d+/")
*/
或使用ctype_digit
创建验证程序。
答案 4 :(得分:1)
从Symfony v2.3版本开始,您应该使用:
/**
* @Assert\Type(type="integer")
* @Assert\GreaterThan(0)
*/
但请记住,表单字段类型应为整数(IntegerType::class
),否则我将获得否定验证。
答案 5 :(得分:0)
我必须在表单字段类型中使用number
,但它在输入标签旁边显示了一个星号*
,尽管它不是必需的。所以,我也必须使用'required' => false
。表单字段类型integer
不起作用。基础字段数据类型为smallint
。
->add('storey', 'number', array('required' => false))
YML中的Regex
约束也不起作用,而类型为integer
或未提供任何内容。我不知道为什么
storey:
- Regex: '/^[0-9]+$/'
我的Symfony版本是2.7。