Symfony2验证(yml)被忽略

时间:2015-02-24 21:30:00

标签: php validation symfony

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

1 个答案:

答案 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将起作用。您始终可以调整错误消息,以便用户知道限制。