Doesn't element#addError suffice?


Sent from my iPhone

On Nov 10, 2010, at 5:54 PM, Hector Virgen <[email protected]> wrote:

> After looking into this a bit further, I found that the "errors" decorator
> calls Zend_Form_Element#getMessages(), which simply returns the
> $_messagesarray. Unfortunately, there's no way to clear that array
> without calling
> Zend_Form_Element#isValid(). When calling Zend_Form_Element#setErrors(), the
> provided errors are appended to the $_messages array. In other words, once
> an error message has been added to the stack during validation, it's
> practically impossible to remove.
> 
> The following unit tests demonstrate the problem:
> 
> http://pastie.org/1288565
> 
> However, it could just be that I am not using Zend_Form correctly. Has
> anyone run into this problem before?
> 
> --
> *Hector Virgen*
> Sr. Web Developer
> http://www.virgentech.com
> 
> 
> 
> On Wed, Nov 10, 2010 at 1:53 PM, Hector Virgen <[email protected]> wrote:
> 
>> Hello,
>> 
>> What is the most straight-forward way to mark an element as invalid and
>> display a custom error message *without using validators*?
>> 
>> For example, we are using a web service to process data submitted via a web
>> form. I have set up validators in my form for the basic things like required
>> fields and string length, but sometimes there is additional validation that
>> occurs on the web-service side that could prevent the process from
>> continuing. In that event I'd like to take the error message from the web
>> service and inject it into the offending form element to be displayed to the
>> user.
>> 
>> I've looked over the API and 
>> documentation<http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors>and
>>  there are two methods that seem likely candidates for doing my bidding:
>> 
>> *Zend_Form_Element#setErrors(array $errors)*
>> *Overwrite any previously set error messages and flag as failed validation
>> *
>> 
>> *Zend_Form_Element#setErrorMessages(array $errorMessages)*
>> *Same as addErrorMessages(), but clears custom error message stack first*
>> 
>> If I use setErrors() and pass in an array with a single error message, the
>> message is duplicated when rendering.
>> 
>> If I use setErrorMessages() and pass in an array with a single error
>> message, the message is not displayed at all when rendering.
>> 
>> I found that if I call both methods and pass in the same single-value array
>> to both of them, it works as expected -- I get my nice error message on the
>> rendered form.
>> 
>> Is this typically how it should be done? Or am I missing something? Thanks!
>> 
>> --
>> *Hector Virgen*
>> Sr. Web Developer
>> http://www.virgentech.com
>> 
>> 

Reply via email to