Por vezes os
Validators disponíveis no Symfony não são sufientes para validar os nossos campos, principalmente quando um campo depende de outro, p.e.:
se cmb_a is cheched e cmb_b is checked
então
//acção
senão
//erro!
Para tal, necessitamos de criar
Validators personalizados e aplica-los ao nosso campo. Para tal na nossa classe de formulário acrescentamos as seguintes linhas:
public function configure()
{
parent::configure();
$this->validatorSchema['my_field'] = new sfValidatorCallback(
array('callback' =>
array($this, 'validateMyField')
)
);
}
public function validateMyField($validator, $value)
{
/* All my action goes here */
$tainted_values = $this->getTaintedValues();
if ($tainted_values['my_field_2'] > 0 && $value != '')
{
return $value;
}
else
{
throw new sfValidatorError($validator, "I guess something goes wrong here!");
}
}
No método
validateMyField podemos aceder aos valores todos do formulário obtendo os
Tainted values disponíveis utilizando o método
getTaintedValues da classe dos formulários.
Realizadas as verificações pretendidas devolvemos o valor (
$value) do campo validado ou despoletamos um erro que será apresentado pelo método
renderError do formulário.