-- dowker <[EMAIL PROTECTED]> wrote
(on Thursday, 03 April 2008, 07:39 AM -0700):
> When trying to validate an email address, many different validation messages
> can appear depending on what the user enters. For example, if a user enters
> "[EMAIL PROTECTED]" (without the quotes), we get the following validation
> messages:
>
> * 'test.' is not a valid hostname for email address '[EMAIL PROTECTED]'
> * 'test.' appears to be a DNS hostname but cannot extract TLD part
> * 'test.' does not appear to be a valid local network name
> * 'test.' appears to be a local network name but local network names are
> not allowed
>
> While this amount of detail can be very useful in some cases, it really
> isn't when trying to display user-friendly messages in a form.
>
> Is there a way to limit the messages to something simple like "The email
> address you entered is incorrect."?
Right now, no, not without a little work. Several people have requested
such a feature now, and it is in the tracker.
For the time being, I'd suggest the following:
* Add an error message to your element as an attribute:
$element->errorMessage = "custom error message";
* Create a custom 'Errors' decorator that pulls that attribute and
displays it:
class My_Decorator_Errors extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$element = $this->getElement();
if (!isset($element->errorMessage)) {
// Fallback to original errors decorator if property not
// present
require_once 'Zend/Form/Decorator/Errors.php';
$decorator = new Zend_Form_Decorator_Errors();
$decorator->setElement($element)
->setOptions($this->getOptions());
return $decorator->render($content);
}
$view = $element->getView();
$html = '<div class="error">'
. $view->escape($element->errorMessage)
. '</div>';
$placement = $this->getPlacement();
$separator = $this->getSeparator();
switch ($placement) {
case self::PREPEND:
return $html . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $html;
}
}
}
* Make sure that you have a decorator path to the above set for your
elements:
$form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
and that should do it.
--
Matthew Weier O'Phinney
PHP Developer | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/