Guess I need to submit a bug report? Noone has any thoughts? Josh
"Joshua Ross" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > > "Joshua Ross" <[EMAIL PROTECTED]> wrote > in message news:[EMAIL PROTECTED] >>I am having a problem with Zend_Filter_Input when attempting to validate >>an array of values using the fields meta command. What happens is that >>ZFI passes the array of values to my filter which correctly returns true >>and then ZFI passes each value separately which fails. Here is my >>code(simplified) pretty much straight from the doc: >> >> $validators = array('password_check' => array('StringEquals', >> 'presence' => 'required', >> 'fields' => array('password0', 'password1')); >> >> $input = new Zend_Filter_Input(array(), $validators, >> $this->getRequest()->getPost()); >> $input->addNamespace('Local_Validate'); >> >> if (!$input->isValid()) { >> >> } >> >> What happens is StringEquals is called three times, once with an array, >> and once with each string. Some debug output dumping the value passed to >> my StringEquals validator produces the following: >> >> array(2) { >> ["password0"] => string(9) "Testing1!" >> ["password1"] => string(9) "Testing1!" >> } >> >> string(9) "Testing1!" >> >> string(9) "Testing1!" >> >> >> So I looked into ZFI and it appears it handles arrays of fields (line 720 >> in ZF 1.0.0 v5344) but then it continues to evaluate all fields in the >> data array *seperately* validating it against the current validator chain >> which happens to be the validator StringEquals which only validates >> arrays... which of course returns false. >> >> Basically, it appears either I am missing something or having the fields >> meta command set to an array will not work if the validator validates >> that the value is in fact an array. Anyone else come across this? >> Should my validator simply return true if the value is not an array? I'm >> not sure I care too much for that work around. To me, if you pass the >> fields meta command with an array value it should only validate the >> array, not each seperately. Any help is appreciated, >> Thanks >> Josh >> >> > > > The following if stmt fixes the issue: > // Added the below if check > if (1 == count($validatorRule[self::FIELDS])) { > if (!$validatorRule[self::VALIDATOR_CHAIN]->isValid($value)) { > $this->_invalidMessages[$validatorRule[self::RULE]] = > $validatorRule[self::VALIDATOR_CHAIN]->getMessages(); > $this->_invalidErrors[$validatorRule[self::RULE]] = > $validatorRule[self::VALIDATOR_CHAIN]->getErrors(); > unset($this->_validFields[$fieldKey]); > $failed = true; > if ($validatorRule[self::BREAK_CHAIN]) { > return; > } > } > > >
