2016-04-11 26 views
1

Bir form kümesi etiketini form satırlarımın çevresine nasıl sarabilirim ve bir öğe doğrulanamadığı zaman alan kümesine nasıl bir tehlike sınıfı ekleyebilirim?ZF2 Form Onarma Hatası'nda Özel Sınıf Oluşturma

Bir viewhelper oluşturmam gerektiğini, belirli bir formelementin bir doğrulama mesajının olup olmadığını kontrol edin ve satırı bir fieldset ile sarın, ancak doğru yaklaşımın ya da nasıl yapılacağından emin değilim.

Ben doğrulama hatası üzerinde istediğiniz çıkışı:

<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

Merhaba @ user1989781 daha Precisions için * .phtml kodu yapıştırın olabilir? – jbrtrnd

+1

buradan ulaşabilirsiniz http://stackoverflow.com/questions/24183321/in-zf2-how-to-add-a-error-css-class-on-validation-failed – dixromos98

cevap

0

Tamam, bunun yerine formRow() ait formLabel(), formElement() ve formElementErrors() görünüm yardımcıları kullanmalıdır.

ZF2 bilgilerime göre, formRow() görünümü yardımcı, HTML çıkışında kolayca kontrol sahibi olmanıza izin vermez. Kodun bir satırında tam giriş HTML (etiket + giriş + hataları) görüntüler.

sadece amaca ulaşmak için, bir girdi için phtml yapısı aşağıdaki gibidir olmak zorundadır:

// 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> 

Bu formda her alanlar için bunu yapmak zor bir iştir, bu yüzden bu koymak önermek görünüm yardımcısında mantık.

// 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; 
     } 
    } 
?> 

Module.php numaralı telefondan bildirin. senin phtml dosyasında

// 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); 
       }, 
      ], 
     ]; 
    } 
?> 

Ve şimdi, sadece:

// NAME_OF_YOUR_FILE.phtml 

... 

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

... 
+0

Teşekkürler! :) Herhangi bir nedenle benim view helper'da invoke yöntemini çağırmak zorunda kaldım: $ html. = $ This-> formLabelViewHelper -> __ invoke ($ formElement); btw, $ errors'ı başlatırken yanlış yöntem adını yazdınız. – user1989781