【发布时间】:2013-12-27 13:25:05
【问题描述】:
我在 Symfony2 中使用 FOSUserBundle,我希望用户在家庭电话号码和手机号码之间输入至少一个电话号码,但我找不到在哪里添加至少一个支票字段已填写。
有什么线索吗? 谢谢
【问题讨论】:
标签: symfony fosuserbundle
我在 Symfony2 中使用 FOSUserBundle,我希望用户在家庭电话号码和手机号码之间输入至少一个电话号码,但我找不到在哪里添加至少一个支票字段已填写。
有什么线索吗? 谢谢
【问题讨论】:
标签: symfony fosuserbundle
你可以让自己成为一个类约束。在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
这应该可以解决问题。
【讨论】:
PhoneNnumber 实体的集合并使用Count (min=1) 和Collection (NotBlank + allowMissingFields=true) 的组合来验证该集合。例如,当添加更多类型的电话号码时,这将更容易维护。