FOSUserBundle:强制要求的两个字段之一

时间:2013-12-27 13:25:06

标签: symfony fosuserbundle

我在Symfony2中使用FOSUserBundle,我希望用户在家庭电话号码和手机号码之间输入至少一个电话号码,但我找不到在哪里添加支票至少一个田野填满。

任何线索? 感谢

1 个答案:

答案 0 :(得分:2)

你可以让自己成为一个类约束。请看custom constraints上Symfony的食谱部分。在底部有一个关于类约束验证器的小部分。

你会有这样的约束:

class RegistrationPhones extends Constraint
{
    public $message = '';

    public function getTargets()
    {
        return self::CLASS_CONSTRAINT;
    }

    public function validatedBy()
    {
        return 'user_phones_validator';
    }
}

然后您的验证器将如下所示:

class RegistrationPhonesValidator extends ConstraintValidator
{
    public function validate($registration, Constraint $constraint)
    {
        $homePhone = $registration->getHomePhone();
        $mobilePhone = $registration->getMobilePhone();
        if (empty($homePhone) && empty($mobilePhone)) {
            $this->context->addViolationAt('homePhone', $constraint->message, array(), null);
        }
    }
}

最后,您的validation.yml会有一个类似的条目:

User\MyBundle\Form\Model\Registration:
    constraints:
        - User\MyBundle\Validator\Constraints\RegistrationPhonesValidator:
            message: phones.at_least_one_must_be_set

这应该可以解决问题。