-- Terre Porter <[EMAIL PROTECTED]> wrote (on Thursday, 04 December 2008, 04:23 PM -0500): > Hi all, > > Am I reading what this function does incorrectly? > > I read it as, set an error message for element, and set the element as > invalid or the same as what the comment says.
This was reported on-list yesterday, and an issue has been filed. In short, markAsError() is not being honored during isValid(). > > --------------------- zend/form/element.php > /** > * Add an error message and mark element as failed validation > * > * @param string $message > * @return Zend_Form_Element > */ > public function addError($message) > { > $this->addErrorMessage($message); > $this->markAsError(); > return $this; > } > --------------------- > > I've created a test function below. Test results are under the code. > > --------------------- > Test code: > --------------------- > > /* \/---------- code inside generic index action controller */ > > /* force error switch, to test with */ > $testMakeInvalid = false; > > /* if is form post */ > if ($this->getRequest()->isPost()) { > > /* load form with post values */ > $form = $this->getForm1($_POST, testMakeInvalid ); > > /* is form valid ? */ > if (!$form->isValid($_POST)) { > /* form is invalid */ > echo '-- form is NOT valid<BR>'; > } else { > /* for is valid */ > echo '-- form is valid<BR>'; > } > } else { > /* load empty form */ > $form = $this->getForm1(array(), testMakeInvalid ); > } > $this->view->form = $form ; > /* /\---------- code inside generic index action controller */ > > /* view template contains */ > <? echo echo $this->form; ?> > > /* the get form function */ > Function getForm ($data = array(), $testMakeInvalid = false) { > > /* create form */ > $form = new Zend_Form(); > $form->setMethod('post'); > $form->setAttrib('id', 'reg-free'); > > /* create form element */ > $elm = new Zend_Form_Element_Text('element1'); > $elm->setOptions(array('maxlength' => 125, 'class' => 'frmImput', 'size' => > 32)); > $elm->setLabel('test field'); > $elm->setRequired(true); > $elm->addValidator('regex', false, array('/^((0[1-9]|1[012])[- > \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)[0-9][0-9])/i')); > $elm->addFilter('stringTrim'); > $elm->addValidator('stringLength', false, array(1,125)); > > if ($testMakeInvalid) { > $elm->addError('force element error'); > } else { > /* check if data is passed to element */ > if (isset($data['element1'])) { > echo '-- has data<BR>'; > $elm->addError('with form data error here'); > > } else { > echo '-- no data<BR>'; > $elm->addError('empty form load error here'); > } > } > > /* add in a submit button */ > $submit=$form->CreateElement('submit','submit')->setLabel('Save'); > > /* add form elements to form */ > $form->addElement($expDate); > $form->addElement($submit); > > /* return form object */ > return $form; > > } > --------------------- > > The results are as follows : > > -- Test #1 > > Set $testMakeInvalid = false; > Empty form load > > Result -> "empty form load error here" > > This was the expected result. > > -- Test #2 > > Set $testMakeInvalid = false; > Post form with value "invalid" (fails the regex validation) > > Result -> "with form data error here" > > This was the expected result. > > -- Test #3 > > Set $testMakeInvalid = true; > Form empty or not empty > > Result -> "force element error" > > This was the expected result > > -- Test #4 > > Set $testMakeInvalid = false; > Post form with value "01/02/2003" (passes the regex validation) > > Result -> "form valid" > > WHAT!!! The expected result was for it to fail. > > It ignored the $elm->addError statement totally. > > Is this a bug or is the $elm->addError function ignored on purpose if the > element passes previous validation checks? > > I know I can write my own validation function but using the $elm->addError > just looked simpler with less code. > > Thanks > Terre > > -- Matthew Weier O'Phinney Software Architect | [EMAIL PROTECTED] Zend Framework | http://framework.zend.com/