有没有办法在fieldset-element的验证器中访问整个表单的上下文?似乎标准行为是上下文仅包含元素所在的字段集的表单数据。
这是我的自定义验证器:
/**
* Returns if the given value is valid
*
* @param string $value
* @param array $context
* @return boolean
*/
public function isValid($value, array $context = array())
{
$this->setValue($value);
$bookingId = isset($context['auftrag_buchung_id'])
? (int) $context['auftrag_buchung_id']
: null;
try {
$anlieferung = new \DateTime($value);
} catch (\Exception $e) {
$this->error(self::NOT_DATETIME);
return false;
}
try {
$booking = $this->table->getById($this->user, $bookingId);
} catch (\Exception $e) {
$this->error(self::NOT_FOUND);
return false;
}
if (!$this->isInBookingRange($value, $booking)) {
$this->error(self::NOT_IN_BOOKINGRANGE);
return false;
}
return true;
}
我的问题是$ context只包含我配置此验证器的字段集的表单数据。但是我必须检查不在fieldset中的值
答案 0 :(得分:1)
在使用InputFilter将验证器分配给表单时,应该可以将表单实例注入验证器。
//
$form = new \Zend\Form\Form();
/* ..following could be within __construct() Method of the Form object */
//
$element = new \Zend\Form\Element\Text('text');
$form->add($element);
//
$inputFilter = new \Zend\InputFilter\InputFilter();
//
$textInput = new \Zend\InputFilter\Input('text');
// Add validator with injected form instance
$textInput->getValidatorChain()
->attach(new CustomValidator($form));
$inputFilter->add($textInput)
//
$form->setInputFilter($inputFilter);
使用此设置,您应该能够在验证类中使用表单数据:
class CustomValidator {
private $form;
public function __construct($form) {
$this->form = $form;
}
public function isValid($value) {
// Access form data
$this->form->getData();
}
}