2016-04-11 2 views
1

Wie kann ich ein Feldset-Tag um meine Formularzeilen umbrechen, und wie kann ich dem Feldset eine Hasendrohungsklasse hinzufügen, wenn ein Element nicht validiert werden kann?ZF2 Render Benutzerdefinierte Klasse auf Formular Validierung Fehler

Ich denke, ich muss einen Viewhelper erstellen, überprüfen, ob eine bestimmte Formelement eine Überprüfungsmeldung hat und die Zeile mit einem Fieldset umschließen, aber ich bin mir nicht sicher, ob das der richtige Ansatz ist oder wie es geht.

Der Ausgang I auf Validierungsfehler möchten:

<fieldset class="has-danger"><label for="username">Username</label> 
<input type="text" name="username" id="username" class="form-control 
input-error" value="f"><ul><li>Needs to be 5-20 characters long</li> 
</ul></fieldset> 

register.phtml:

<?php 
$form = $this->registerForm; 
$form->prepare(); 
echo $this->form()->openTag($form); 

echo $this->formHidden($form->get('secret')); 
echo $this->formRow($form->get('username')); 
echo $this->formRow($form->get('password')); 
echo $this->formRow($form->get('email')); 
echo $this->formRow($form->get('confirm-email')); 
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag($form); 
+0

Hallo @ user1989781 könnten Sie Ihren * .phtml Code für weitere Präzisierungen einfügen? – jbrtrnd

+1

mögliche Antwort hier http://stackoverflow.com/questions/24183321/in-zf2-how-to-add-a-error-css-class-on-validation-failed – dixromos98

Antwort

0

Ok, sollten Sie die formLabel(), formElement() und formElementErrors() View Helfer statt formRow() verwenden.

Zu meinem ZF2-Wissen, der View-Helfer lässt Sie nicht einfach Kontrolle über die HTML-Ausgabe haben. Es zeigt den vollständigen Eingabe-HTML-Code (Label + Eingabe + Fehler) in einer Codezeile an.

einfach Ihr Ziel zu erreichen, hat Ihre phtml Struktur für einen Eingang wie folgt sein:

// NAME_OF_YOUR_FILE.phtml 
<?php 
    $userNameInput  = $form->get('username'); 
    $userNameInputErrors = $this->formElementErrors($userNameInput); 
?> 
<fieldset class="<?= $userNameInputErrors ? 'has-danger' : '' ?>" > 
    <?= $this->formLabel($userNameInput) ?> 
    <?= $this->formElement($userNameInput) ?> 
    <?= $userNameInputErrors ?> 
</fieldset> 

Dies ist eine harte Arbeit diese in Form für die einzelnen Felder zu tun, so empfehle ich Ihnen, dies zu setzen Logik in einem Ansichtshelfer.

// MyFormRow.php 
<?php 
    namespace Your\Namespace; 

    use Zend\View\Helper\AbstractHelper; 

    class MyFormRow extends AbstractHelper 
    { 
     protected $formLabelViewHelper; 
     protected $formElementViewHelper; 
     protected $formElementErrorsViewHelper; 

     public function __construct($formLabelViewHelper, $formElementViewHelper, $formElementErrorsViewHelper) 
     { 
      $this->formLabelViewHelper   = $formLabelViewHelper; 
      $this->formElementViewHelper  = $formElementViewHelper; 
      $this->formElementErrorsViewHelper = $formElementErrorsViewHelper; 
     } 

     public function __invoke($formElement) 
     { 
      $html = ''; 

      $errors = $this->formElementErrorsViewHelper->__invoke($formElement);  

      $html .= '<fieldset class=" . ($errors ? 'has-danger' : '') . ">';  
       $html .= $this->formLabelViewHelper->__invoke($formElement); 
       $html .= $this->formElementViewHelper->__invoke($formElement); 
       $html .= $errors; 
      $html .= '</fieldset>'; 

      return $html; 
     } 
    } 
?> 

Erklären Sie es in Ihrem Module.php.

// In your Module.php 
<?php 

    ... 

    public function getViewHelperConfig() 
    { 
     return [ 
      'factories' => [ 
       'myFormRow' => function (HelperPluginManager $helperPluginManager) { 
        $formLabelViewHelper  = $helperPluginManager->get('formLabel'); 
        $formElementViewHelper  = $helperPluginManager->get('formElement'); 
        $formElementErrorsViewHelper = $helperPluginManager->get('formElementErrors'); 

        return new MyFormRow($formLabelViewHelper, $formElementViewHelper, $formElementErrorsViewHelper); 
       }, 
      ], 
     ]; 
    } 
?> 

Und jetzt in Ihrer phtml Datei einfach wie folgt:

// NAME_OF_YOUR_FILE.phtml 

... 

<?= echo $this->myFormRow($form->get('username')) ?> 

... 
+0

Danke! :) Aus irgendeinem Grund musste ich die Aufrufmethode in meinem View-Helfer aufrufen, wie: $ html. = $ This-> formLabelViewHelper -> __ invoke ($ formElement); BTW Sie schrieben den falschen Methodennamen beim Instantiieren von $ -Fehlern. – user1989781

Verwandte Themen