2012-08-31 22 views
13

मैं एक नाम और रंग के साथ एक गतिविधि जोड़ने के लिए एक साधारण रूप करने की कोशिश कर रहा हूं।symfony2 अनुकूलित करें विकल्प का चयन करें

तो मैं कुछ रंगों के साथ एक सूची बनाना चाहता हूं, क्योंकि अब यह काम कर रहा है मेरे पास रंग का नाम है।
मैं अपने चयन टैग के लिए किसी भी विशेषता जोड़ सकते हैं:

$form = $this->createFormBuilder($myclass) 
->add('Colors','choice',array('label'=>'select some colors', 
      'multiple'=>true, 
      'choices'=>array(1=>'red', 2=>'blue', 3=>'green'), 
      'attr'=>array('style'=>'width:300px', 'customattr'=>'customdata') 
      )); 

उत्पादन कुछ इस तरह होगा:

<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata"> 
    <option value="1">red</option> 
    <option value="2">blue</option> 
    <option value="3">green</option> 
</select> 

लेकिन मैं selected="selected" कैसे जोड़ सकते हैं और कर सकते हैं किसी भी विशेषता मेरी चयन के विकल्प के लिए मैं चाहता हूँ? इस तरह:

<select name="select" style="width: 300px;" multiple="multiple" customattr="customdata"> 
    <option style="background-color: #F00;" value="1" selected="selected">red</option> 
    <option style="background-color: #00F;" value="2" selected="selected">blue</option> 
    <option style="background-color: #0F0;" value="3">green</option> 
</select> 

मेरे सवाल यह है: मैं कैसे option टैग (select टैग के लिए नहीं) सिम्फोनी FormBuilder द्वारा लिए कस्टम attr जोड़ सकते हैं।
नोटिस: मैं जावास्क्रिप्ट का उपयोग नहीं करना चाहता। मैं अपने चयन विकल्पों को अनुकूलित करने के लिए symfony2 फॉर्मबिल्डर का उपयोग करना चाहता हूं।

उत्तर

10

आमतौर पर, फ़ील्ड का डिफ़ॉल्ट डेटा आपके ऑब्जेक्ट में संग्रहीत मान द्वारा निर्धारित किया जाता है। उदाहरण के लिए, यदि

class MyClass 
{ 
    private $Colors = array(1, 2); 
} 

तो प्रविष्टियों "1" और "2" के रूप में डिफ़ॉल्ट रूप से चयनित प्रदर्शित किया जाएगा (लेबल "लाल" और "हरी" के साथ)।

$builder->add('Colors', 'choice', array(
    'label' => 'select some colors', 
    'multiple' => true, 
    'choices' => array(1 => 'red', 2 => 'blue', 3 => 'green'), 
    'attr' => array('style' => 'width:300px', 'customattr' => 'customdata'), 
    'data' => array(1, 2), 
)); 
1

प्रत्येक Fieldabstract field type से सिम्फनी विरासत में विरासत में, जिसमें data विकल्प है, जिसमें आप डिफ़ॉल्ट विकल्प पास कर सकते हैं।

वैसे, style सामान पास न करें, और कस्टम attrs के लिए data-* विशेषताएँ का उपयोग करें।

+0

मैं 'डेटा' गुण कैसे उपयोग कर सकते हैं:

उदाहरण के लिए यदि आप विकल्प को json इनकोडिंग इकाई पास करना चाहते हैं, तो आप कुछ इस तरह उपयोग कर सकते हैं? मैं इसे फॉर्मबिल्डर को कैसे पास करता हूं। कृपया और बताएं। –

+0

एचटीएमएल-अनुरूप होने के लिए, 'डेटा-कस्टमर'' पर बस 'customattr' का नाम बदलें। – moonwave99

+0

मैं अपने 'विकल्प' टैग के लिए 'customattr' का उपयोग करना चाहता हूं, न कि 'select' टैग के लिए। फॉर्मबिल्डर द्वारा मैं यह कैसे कर सकता हूं? –

3
:

$myObject->Colors = array(1, 2); 

$form = $this->createFormBuilder($myObject) 
    ... 

पिछले संभावना "डाटा" विकल्प पास करके वस्तु में संग्रहीत डिफ़ॉल्ट मान ओवरराइड करने के लिए है: आप भी इसे फार्म के लिए पार करने से पहले वस्तु में इस मान को संग्रहीत कर सकती है

डेटा विकल्प के रूप में के लिए चयनित = "चयनित" यहाँ वर्णित का उपयोग करें: http://symfony.com/doc/current/reference/forms/types/field.html

उर मामले में इस

की तरह हो सकता है 0

नए तत्व डेटा चयनित विशेषता

1

Symfony 2 की तरह लग रहा के रूप में पसंद सरणी की संख्या की स्थापना है।7 समर्थन जोड़ देगा बनाने के लिए इस आसान:

https://github.com/symfony/symfony/pull/14050

1

प्रपत्र वर्ग विधि Symfony \ घटक \ फार्म में जोड़े \ AbstractType :: finishView

public function finishView(FormView $view, FormInterface $form, array $options) 
{ 
    parent::finishView($view, $form, $options); 

    $additionalAttributes = array(); 

    // myMethod - method $choice, returns a value that is to be substituted into the attribute 
    foreach ($view->children['orders']->vars['choices'] as $id => $choice) { 
     $additionalAttributes[$id] = array(
      'data-cost' => $this->propertyAccessor->getValue($choice->data, 'myMethod'), 
      'disabled' => 'disabled', 
     ); 
    } 

    foreach ($view->children['orders']->children as $id => $child) { 
     $child->vars['attr'] = array_replace(
      isset($child->vars['attr']) ? $child->vars['attr'] : array(), 
      $additionalAttributes[$id] 
     ); 
    } 
} 

Symfony2 Form – add attribute tag option in select field type

1

जोड़ने के लिए अपने उस विकल्प के मूल्य के आधार पर पसंद पर कस्टम विशेषता, ChoiceType फ़ील्ड के choice_attr विकल्प का उपयोग करने पर विचार करें।

'choice_attr' => function($val, $key) { 
    return ['data-object' => json_encode($val)]; 
}, 
संबंधित मुद्दे