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.

--------------------- 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


Reply via email to