我在我的bundle Resources / config目录中设置了validation.yml。我在config.yml中启用了验证器:
framework:
validation: { enabled: true, enable_annotations: false }
资源/配置/ validation.yml:
MyBundle\AppBundle\Handler\SearchModel:
properties:
search:
- Length:
min: 2
max: 50
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
在我的控制器中我正在做:
$validator = $this->get('validator');
$errors = $validator->validate($searchModel);
我很确定(因为我仔细检查过)要验证的模型的属性是string(1)1 char。 (应该是最小的2!)
但$ error的var_dump()表示:
object(Symfony\Component\Validator\ConstraintViolationList)#327 (1) {
["violations":"Symfony\Component\Validator\ConstraintViolationList":private]=>
array(0) {
}
}
因此,不会抛出任何错误。我怎么解决这个问题?我希望验证器能够工作:)
更新
我通过解决方法让它(现在)工作。我在(SearchModel)类中添加了一个loadValidatorMetaData方法来验证。
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata
->addPropertyConstraint(
'search',
new Assert\Length(
array('min' => 2, 'minMessage' => 'Error message.')
)
);
}
检查$ validator-> validate($ searchModel);它返回错误,因此验证工作正常。但不是.yml文件:(
答案 0 :(得分:0)
我设置了一个小测试用例并且没有错误。我添加了NotBlank约束,并在搜索空白时出错。
Acme\DemoBundle\Command\SearchModel:
properties:
search:
- Length:
min: 2
max: 5
minMessage: "Your string must be at least {{ limit }} characters long"
maxMessage: "Your string cannot be longer than {{ limit }} characters long"
- NotBlank: ~
然后我将搜索设置为一个字符
class SearchModel
{
public $search = 'a';
}
它触发了最小长度错误。
我通读了长度文档:http://symfony.com/doc/current/reference/constraints/Length.html。当然,似乎零长度字符串应该触发错误。
无论如何,添加一个NotBlank约束,你应该好好去。
我检查了代码:
namespace Symfony\Component\Validator\Constraints;
class LengthValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (null === $value || '' === $value) {
return;
}
所以我猜这就是所谓的无证'特征'。字符串长度为零不被认为小于min!很想知道是否有关于此的错误报告。但同样,NotBlank将起作用。您始终可以调整错误消息,以便用户知道限制。