2012-12-07 23 views
13

मैं ज़ेंड फ्रेमवर्क 2 का उपयोग करके एक एप्लिकेशन विकसित कर रहा हूं और मैं फॉर्मरो सहायक का उपयोग एक फॉर्म में एक लेबल, इनपुट और त्रुटियों (यदि मौजूद है) प्रस्तुत करने के लिए सहायक हूं।फॉर्म त्रुटियों में कक्षा विशेषता जोड़ें

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

मैं कैसे ली टैग के लिए एक वर्ग सेट कर सकते हैं:

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

एक उपयोगकर्ता के लिए आवश्यक इनपुट पाठ फ़ील्ड FormRow भरे बिना प्रपत्र सबमिट करता है निम्न त्रुटि संदेश के साथ इसे render's बाद में इसे स्टाइल करने के लिए?

मुझे पता है कि मैं के माध्यम से ..

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

वांछित वर्ग विशेषता के साथ formElementErrors गूंज सकता है ..लेकिन FormRow अभी भी वर्ग के बिना त्रुटि संदेश उत्पन्न करता है।

बस संदर्भ मैं इकाई इस तरह से स्थापित करने के लिए

:

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

उत्तर

10

ठीक है, मेरे अपने समस्या के समाधान के बजाय का उपयोग करने का मेरे सामने सही था,:

//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")); 

नहींं जानते हैं:

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

मैं प्रपत्र के प्रत्येक तत्व को अलग-अलग बुलाया यदि यह करने का सबसे प्रभावी तरीका है, तो यदि आप अन्यथा सोचते हैं तो कृपया एक पंक्ति ड्रॉप करें।

22

देखें the code of formElementErrors

मूल रूप से आप की तरह कुछ कर सकता है:

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

लेकिन वह काफी असुविधाजनक है ..

बेहतर समाधान ज़ेंड \ फ़ॉर्म का विस्तार करना होगा अपने स्वयं के वर्ग द्वारा \ Helper \ FormElementErrors देखें और फिर अपनी कक्षा में व्यू-हेल्पर फॉर्म एलिमेंट एरर पंजीकृत करें।

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">'; 
} 

अंतिम बात तो इस नए वर्ग के साथ दृश्य सहायक रजिस्टर करने के लिए किया जाएगा: तो बुनियादी तौर पर आप कुछ इस तरह होगा। इसके लिए आपको अपने मॉड्यूल Module.php

अंदर निम्नलिखित कोड प्रदान
public function getViewHelperConfig() 
{ 
    return array(
     'invokables' => array(
      'formelementerrors' => 'Mymodule\Form\View\Helper\FormElementErrors' 
     ), 
    ); 
} 

displaimer: इस कोड का परीक्षण नहीं किया है, मुझे पता है अगर वहाँ कुछ त्रुटियाँ हैं, लेकिन मुझे लगता है कि यह बहुत अच्छी तरह से बाहर काम करना चाहिए।

+1

+1 केवल पुष्टि के लिए, यह काम कर रहा है। धन्यवाद फिर से सैम :) – webcoder

+1

यह एक पुराना धागा है, लेकिन बस मेरे दो सेंट जोड़ने के लिए: इसे पंजीकृत करने का एक और तरीका है 'view_helpers => invokables' में अपनी मॉड्यूल.config.php फ़ाइल में प्रविष्टि जोड़ने के लिए वास्तविक मॉड्यूल.पीपी। वही प्रभाव, अलग विधि। – blainarmstrong

2

फॉर्मरो जांचें कि "form_element_errors" प्लगइन पंजीकृत है या नहीं। और यदि ऐसा है तो त्रुटि संदेशों को प्रदर्शित करने के लिए इसे डिफ़ॉल्ट रूप से उपयोग करें।

तो सैम का उदाहरण काम करता है। आपको मानक प्लगइन को फिर से परिभाषित करना चाहिए और इसके बारे में एमवीसी को सूचित करना चाहिए।

मैंने इसे मॉड्यूल.कॉन्फिग में किया है।php

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

और के रूप में मैं चाहता हूँ :)

1

आपकी समस्या के रूप में, प्रयास करें

बदलें

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

को

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

अपने funciton के रूप में प्रस्तुत त्रुटियाँ संदेश

echo $this->formElementErrors($form->get('name'), array('class' => 'your-class-here')); 
0

मैं एक ही स्थान पर सभी त्रुटि संदेशों को दिखाने के लिए echo $this->formElementErrors($form, array('class' => "error-messages")); का उपयोग करें:

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'));