2012-12-07 21 views
13

Zend Framework 2'yi kullanarak bir uygulama geliştiriyorum ve bir formda bir etiket, girdi ve hataları (varsa) oluşturmak için FormRow yardımcı programını kullanıyorum.Form öznitelikleri için sınıf özniteliği ekleyin

<label> 
    <span>Name: </span> 
    <input class="input-error" type="text" value="" placeholder="Insert Name Here" name="Name"> 
</label> 
<ul> 
    <li>Value is required and can't be empty</li> 
</ul> 

Ben li etiket için bir sınıf ayarlayabilirsiniz nasıl: Bir kullanıcı gerekli girdi metni alanı FormRow doldurmadan formu gönderir

//within the view 
echo $this->formRow($form->get('Name')); 

aşağıdaki hata mesajı olmadan render's daha sonra stil için?

Ben FormRow hala sınıfta olmadan hata mesajı verecek ..ama ben ..

<?php echo $this->formElementErrors($form->get("Name"), array('class' => "valuerequired", 'message' => "errortestmessage")); ?> 

yoluyla istenilen sınıf özelliği olan formElementErrors yankı biliyoruz. Sadece işletmeye bırakmıştır bu şekilde ayarlanması referans Özür için

:

public function getInputFilter() 
    { 
     if (!$this->inputFilter) { 
      $inputFilter = new InputFilter(); 

      $factory = new InputFactory(); 

      $inputFilter->add($factory->createInput(array(
       'name'  => 'Name', 
       'required' => true, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name'  => 'StringLength', 
         'options' => array(
          'encoding' => 'UTF-8', 
          'min'  => 1, 
          'max'  => 100, 
         ), 
        ), 
       ), 
      ))); 

      $this->inputFilter = $inputFilter; 
     } 
     return $this->inputFilter; 
    } 

cevap

10

Tamam, benim kendi sorunun çözümü kullanmak yerine, önümde haklıydı:

//within the view 
    echo $this->formLabel($form->get('Name')); 
    echo $this->formInput($form->get('Name')); 
    echo $this->formElementErrors($form->get("Name"), array('class' => "some_class", 'message' => "errormessage")); 

Sakın biliyorum:

//within the view 
echo $this->formRow($form->get('Name')); 

ben tek tek formun her eleman denir Bunu yapmanın en etkili yolu ise, aksi takdirde düşünürseniz, bir satır bırakın.

22

the code of formElementErrors

Temelde gibi bir şey yapabileceğini bakınız:

$this->formElementErrors($elem) 
    ->setMessageOpenFormat('<ul%s><li class="some-class">') 
    ->setMessageSeparatorString('</li><li class="some-class">'); 

Ama bu oldukça kullanışsız olduğunu ..

Daha iyi bir çözüm Zend \ Formunu genişletmek olabilir \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\} \ Viewer \ FormElementErrors'ı kendi sınıfınıza göre düzenleyin ve daha sonra görüntü yardımcı formElementErrors sınıfınıza kaydedin

namespace Mymodule\Form\View\Helper; 

use Zend\Form\View\Helper\FormElementErrors as OriginalFormElementErrors; 

class FormElementErrors extends OriginalFormElementErrors 
{ 
    protected $messageCloseString  = '</li></ul>'; 
    protected $messageOpenFormat  = '<ul%s><li class="some-class">'; 
    protected $messageSeparatorString = '</li><li class="some-class">'; 
} 

son şey o zaman bu yeni sınıf ile görünüm yardımcı kayıt olacaktır: Yani temelde böyle bir şey olurdu. Bu kod test edilmemiştir, bazı hatalar varsa bana bildirin, ama bu oldukça iyi çalışması gerekir düşünüyorum: Bunun için

public function getViewHelperConfig() 
{ 
    return array(
     'invokables' => array(
      'formelementerrors' => 'Mymodule\Form\View\Helper\FormElementErrors' 
     ), 
    ); 
} 

displaimer sizin Modüller Module.php

içine aşağıdaki kodu sağlar.

+1

+1 Sadece bu çalıştığını doğrulamak için. Teşekkürler tekrar sam :) – webcoder

+1

Bu eski bir iş parçacığı, ama sadece benim iki sent eklemek için başka bir yoldur: bunu kaydetmek için başka bir yolu yerine 'view_helpers => invokables' eklemek için module.config.php dosyasına bir giriş gerçek Module.php. Aynı etki, farklı yöntem. – blainarmstrong

2

Form "form_element_errors" eklentisinin kayıtlı olup olmadığını kontrol edin. Ve eğer öyleyse hata mesajlarını görüntülemek için varsayılan olarak kullanın.

Sam'in örnek çalışması. Standart eklentiyi yeniden tanımlamalı ve mvc'i bu konuda bilgilendirmelisiniz.

Bunu module.config dosyasında yaptım.php

'view_helpers' => array(
'invokables' => array(
    'formElementErrors'=> 'MyModule\View\Helper\FormElementErrors', 

ve ben ZF2 belgelenmesi itibaren :)

1

sorununuza olarak

Değişim

//within the view 
echo $this->formRow($form->get('Name')); 

için

//within the view 
echo $this->formRow($form->get('Name'),null,false); 
// Note: add more 2 last parameters, false- for $renderErrors => will NOT render Errors Message. 
//Look original function in helper/formrow.php: function __invoke(ElementInterface $element = null, $labelPosition = null, $renderErrors = null, $partial = null) 

sizin funciton olarak Hatalar Mesaj Render deneyin

0

210 Ben tek bir yerde hata mesajlarını göstermek için echo $this->formElementErrors($form, array('class' => "error-messages")); kullanın:

echo $this->formElementErrors($form, array('class' => "error-messages"));// Print all error messagess 

echo $this->formLabel($form->get('Name')); 
echo $this->formInput($form->get('Name')); 

echo $this->formLabel($form->get('Name2')); 
echo $this->formInput($form->get('Name2')); 
İlgili konular