2012-10-03 11 views
5

I tienen forma 5 textoformulario de validación zf2: ¿Cómo puedo validar campos dependientes?

$number1 = new Text('number-1'); 
$number2 = new Text('number-2'); 
$number3 = new Text('number-3'); 
.... 

con los filtros relativos

foreach(...) 
    $input = new Input($elementName); 
    $validator = new ValidatorChain(); 
    $validator->addByName('Int') 
     ->addByName('Between', array(
      'min'=>0, 
      'max'=>$this->maxAllowedTicket, 
      'inclusive'=>true)); 
    $filter = new FilterChain(); 
    $filter->attachByName('Int'); 

    $input->setValidatorChain($validator); 
    $input->setFilterChain($filter); 

Me gustaría que sólo uno de este 3 formas puede contener un valor diferente de 0. Hay entonces dos errores posibles.

NÚMEROS DEMASIADOS

$data['number1'] = 5; 
$data['number2'] = 5; 
$data['number3'] = 0; 
$data['number4'] = 5; 
$data['number5'] = 0; 

NO NÚMERO

$data['number1'] = 0; 
$data['number2'] = 0; 
$data['number3'] = 0; 
$data['number4'] = 0; 
$data['number5'] = 0; 

¿Cómo puedo validar esta varios campos al mismo tiempo?

Respuesta

17

Debe escribir su propia clase Validator para hacerlo. El método isValid() de su nueva clase de validación también recibe el $context que incluye los valores del formulario completo. De esta forma puede validar el valor de cada campo dependiendo de los otros campos.

namespace My\Validator; 
use Zend\Validator\AbstractValidator; 

class CustomValidator extends AbstractValidator 
{ 
    public function isValid($value, $context = null) 
    { 
     // put your logic here and call 
     // $this->error(); if required 
    } 
} 
+0

gracias! funciona, pero ¿cómo puedo registrar este traductor en ValidatorPluginManager? – chrvadala

+0

¿qué traductor? –

+1

no, no usa esto, pero puede simplemente pasar el nombre de clase completo (cadena) como nombre para el validador en una especificación de entrada –

Cuestiones relacionadas