Formular unter Zend validieren

Ich nehme mal an, dass wir den Rumpf eines Formulars vorliegen haben (zf create form…) und eines der Felder validieren wollen:

class Application_Form_MyForm extends Zend_Form
{
  // initialization
  public function init()
  {
    $this->setMethod('post');
 
    $this->addElement(
      'text', 'myelement', array(
        'label' => 'Mein Element*:',
        'required' => true,
        'filters' => array('StringTrim'),
        'validators' => array(array('stringLength', 
                                    false, array(8, 8)), 
                        array('digits'), 
               array(new Application_Form_Validator_MyValidator()))
      )
    );

Dem Element myelement werden unterschiedliche Validatoren hinzugefügt z. B. das nur Zahlen erlaubt sind (digits). Die Validatoren, die das Zend Framework bereits mitbringt, findet man im Verzeichnis Validate. Interessant ist an dieser Stelle der eigene Validator. Damit das ZF den Validator findet muß man zuerst den Autoloader anpassen. Bei mir liegt die Klasse Application_Form_Validator_MyValidator im Verzeichnis application/forms/validators und ist als MyValidator.php abgespeichert. Die Autoloader-Anweisung in der Bootstrap-Klasse lautet wie folgt:

$loader=$this->getResourceLoader();
$loader->addResourceType('validators', 'forms/validators', 
                         'Form_Validator');

Der Validator selbst leitet von der abstrakten Klasse Zend_Validate_Abstract ab und sieht exemplarisch folgendermaßen aus:

class Application_Form_Validator_MyValidator 
                                 extends Zend_Validate_Abstract
{
  // consts
  const INVALID='invalid';
  //----
  
  // properties
  protected $_messageTemplates = array(self::INVALID=>
                               "'%value%' ist kein gültiger Wert");
  //----
  
  // validation
  public function isValid($value, $context = null)
  {
    $this->_setValue($value);
    // validierung
    if(true) // pseudo code
      return true;
 
    $this->_error(self::INVALID);
    return false;
  }
}