4

私は十分に単純な最小年齢のカスタムバリデーターを持っています:

制約(Minage.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class Minage extends Constraint
{
    public $message = 'The user must be {{ age }} or over';
    public $age = 18;

    public function validatedBy()
    {
        return get_class($this).'Validator';
    }
}

バリデーター (MinageValidator.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class MinageValidator extends ConstraintValidator
{
    public function isValid($value, Constraint $constraint)
    {
        $minAge = strtotime(sprintf("-%s YEAR", $constraint->age));
        if(strtotime($value->format("Y-m-d")) > $minAge)
        {
            $this->setMessage($constraint->message,
                              array('{{ age }}' => $constraint->age));
            return false;
        }
        return true;
    }
}

私のエンティティで(重要ではない部分を取り除く)

use MyCompany\VisitBundle\Component\Validator\Constraints as MyCompanyAssert;

/**
 * @ORM\Column(name="birth_date", type="datetime")
 * @MyCompanyAssert\Minage(age="18")
 */
private $birth_date;

そして小枝で:

{{ form_errors(form.birth_date) }}
{{ form_widget(form.birth_date) }}

バリデーターが false を返していることは確かですが、私のフォームはエラー メッセージを表示することを拒否しています。何か案が?

翻訳は無効になっているため、ファイル内の翻訳は検索されません。

前もって感謝します。

更新:form_errors(form.birth_date)動作しませんがform_errors(form)動作しますか? グローバルフォームエラーとして割り当てられるのはなぜですか?

4

2 に答える 2

3

この動作の理由は、エラーのバブリングです。フィールドのerror_bubblingオプションを に設定しますfalse

于 2012-04-05T16:30:46.037 に答える
0

バリデーターのメソッドに追加$this->context->addViolation($constraint->message);してみてください。isValid

于 2012-04-05T16:33:21.717 に答える