考虑以下形式:
protocol BoxDelegate: class {
associatedtype T
func valueInBoxChanged(box: Box<T>) -> Void
}
class Box<T> {
var notifyClosure: (Void -> Void)?
var boxedObject: T {
didSet {
self.notifyClosure?()
}
}
func setBoxDelegate<M where M:BoxDelegate, M.T == T>(delegate: M) {
notifyClosure = {
delegate.valueInBoxChanged(self)
}
}
init(object: T) {
self.boxedObject = object
}
}
我希望验证这些字段,并发现其他$builder->add('home_team', 'choice', [$options])
->add('away_team', 'choice', [$more_options])
->add('timestamp', 'datetime_picker', [$usual_stuff]);
不存在同一个Match
,home_team
和away_team
。
我已经使用timestamp
函数制作了UniqueMatchValidator
,但我需要一些帮助。
我将使用表单中的值进行数据库调用以检查重复项,但为了做到这一点,我需要知道所有三个字段的值,同时将Validator应用于其中一个字段。
问题
如何从Validator中访问所有表单字段的值?
答案 0 :(得分:0)
您的表单应该基本上包含一个实体。您需要使用实体中的回调进行验证。使用回调,您可以访问该实体的所有属性。
此链接肯定会帮助您更好地理解它: Symfony2 Form Validation Callback
答案 1 :(得分:0)
如上所述,使用FormTypes和数据类更好。
然而,即使使用数组,您也可以使用表单验证并使用事件侦听器获取所有字段:
$builder
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$event->getData(); //you will get array with field values
$event->getForm()->addError(...); // if something happens error can be addded
})
实际上,form validator也会使用此事件。