Zend Formular Fehler anzeige

=fire=

Erfahrenes Mitglied
Hallo,

ich benutze Zend um ein Formular darzustellen. Ich möchte sobald ein Fehler in dem Formular ist das das input die class="red" bekommt.

Das Formular sieht so aus:

HTML:
<td width="110"><strong>Firma</strong></td>
<td width="218">
<?php echo $this->form->firm->renderViewHelper(); ?></td>
</tr>

Die ZendForm Datei:

PHP:
class Application_Form_Registration_Step4 extends Zend_Form
{

    public $firm;


    public function init ()
    {
        parent::init();

        $this->setDecorators(array());

        $this->firm = new Zend_Form_Element_Text('firm');
        $this->firm->setRequired(true);
        $this->firm->setAttrib('style', 'width:170px');
        $elements[] = $this->firm;

....

Das Feld ist required, leider wird das nicht "rot" angezeigt.

Im Controller sagt er jedoch bei
PHP:
$this->view->form->isValid($values)
false

Weiß jemand woran das liegen kann?

MFG
 
Mal abgesehen davon das du den Aufruf für die Parent-Mothode "init()" nicht brauchst, da die init-Methode nur ein Wrapper ist zum überschreiben.

Die Firma Zend verwendest du sichelrich nicht, sondern das Zend-Framework :-)

PHP:
$this->setDecorators(array());
// besser
$this->clearDecorators();

Um deinem Element noch eine Klasse zu geben kannst du es mit einem "Options-Array" setzen.
Warum du allerdings für das Feld eine Eigenschaft brauchst ist mir nicht schlüssig.

PHP:
$this->firm = new Zend_Form_Element_Text('feldname', array('class'=>'myClass'));

// besser
$this->addElement('text','feldname', array('class'=>'myClass'));

$Element = $this->getElement('feldname')
     ->setRequired();
// oder weitere filter und validierungen noch hinzufügen

Im Dekorator kannst du ein Suffix für den Required-Status setzen, dies wird aber auch im Manual erklärt.
Du kannst auch einfach das komplette Formular rendern, dann brauchst du nicht jedes Feld einzeln im View-Script ausgeben.
PHP:
echo $this->form;

Die richtigen Dekoratoren sorgen dafür das sie wie gewünscht platziert werden.
 
Zuletzt bearbeitet:
Hallo,

wo finde ich denn die Dekoratoren? Das Problem ist bei dem einen Formular funktioniert das bei einem weiteren nicht, habe schon die Skripte verglichen.

MFG
 
Die Dekoratoren findest kannst du für das Formular setzen und für die Elemente eigens.
Wie das genau geht steht im Manual des Zend-Freamworks.

Ich bevorzuge Listen-ELemente in Formularen, umrandet von einem Fieldset.

Das würde dann ungefähr so aussehen:

PHP:
class MyForm extends Zend_Form{
   public function init(){
   $decorators = array(
	            array('ViewHelper'), 
	            array('Errors'),
	            array('Label', array('requiredSuffix' => ' *')),
	            array('HtmlTag', array('tag' => 'li')),
	        );

    $this->addElement('text','feldname');
    $this->getElement('feldname')
                       ->setDecorators($decorators)
                       ->setOptions(array('class'=>'myClass'))
                       ->setRequired();


    // formular dekoratoren
   $this->setDecorators(array(
	            'FormElements',
	            array('HtmlTag', array('tag' => 'ul')),
	            array(array('DivTag' => 'HtmlTag'), 
	                array('tag' => 'div', 'id' => 'kontaktDiv')),
	            array('Fieldset',array('legend'=>'Kontaktformular ')),           
	            'Form'
	        ));
   }
}

Das is Anfangs ziemlich verwirrend mit den Dekoratoren, aber wenn man mal drin ist, dann ist es leicht damit zu arbeiten.
 
Zurück