繁体   English   中英

Symfony2验证(yml)被忽略

[英]Symfony2 validations (yml) ignored

我在我的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文件:(

我设置了一个小测试用例并且没有错误。 我添加了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将起作用。 您始终可以调整错误消息,以便用户知道限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM