2016-03-21 13 views
0

Symfony'nin varsayılan radyo düğmesi widget'ını Bootstrap'in Radio Button Group ile değiştirmek istedim. Symfony'nin formunda createNamedBuilder işleviyle oluşturulan bir alan için özel bir tema ayarlayarak bunu başarmaya çalışıyordum. Başarısız kaldım çünkü özel alan temaları benim durumumda dinamik olan alanın kimliğini gerektiriyor ..Symfony/TWIG: Eşsiz kimliğe sahip form için özel tema ayarlanamıyor (createNamedBuilder)

TWIG'de tema adlarında değişkenlere sahip olmanın imkansız olduğunu biliyorum, ancak belki de kullanabileceğim alternatif bir yaklaşım var. Sorunumu çöz

AÇIKLAMA:

Ben bir döngüde bir form türü birden çok örneğini oluşturan bir Kontrolör var. Formun adı dinamik requestform_ ve formun kimliğini birleştirerek oluşturulur:

public function listAction(Request $request) 
{ 
    $entityManager = $this->getDoctrine()->getManager(); 
    $requestForms = $entityManager->getRepository('AppBundle:RequestForm')->findBy(array(), array('id' => 'ASC')); 
    $forms = array(); 
    foreach ($requestForms as $requestForm) { 
     $formBuilder = $this->get('form.factory')->createNamedBuilder('requestform_'.$requestForm->getId(), RequestFormType::class, $requestForm); 
     $form = $formBuilder->getForm()->handleRequest($request); 
     $forms[] = $form->createView(); 
    } 
    return $this->render('form/index.html.twig', array('forms' => $forms)); 
} 

RequestFormType ait buildForm fonksiyonu radyo düğmesi widget'i hazırlar ve şuna benzer:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('status', EntityType::class, array(
     'class' => 'AppBundle:Status', 
     'choice_label' => 'name', 
     'expanded' => true, 
     'multiple' => false 
    )); 
} 

Kontrolör vermektedir aşağıdaki şablonu:

{% block content %} 
    {% for form in forms %} 
     {{ form_start(form) }} 
      {{ form_widget(form.status) }} 
     {{ form_end(form) }} 
    {% endfor %} 
{% endblock %} 

radyo düğmeleri yerine Bootstrap adlı düğme grubu seçici göstermeye temalı:

{% block _requestform_1_status_widget %} 
    <div id={{ form.vars.id }} class="btn-group" data-toggle="buttons"> 
     {% for status in form.children %} 
      <label for={{ status.vars.id }} class="btn btn-primary required custom-button-radio"> 
       <input type="radio" id={{ status.vars.id }} name={{ status.vars.full_name }} required="required" value={{ status.vars.value }}> 
       {{ status.vars.label }} 
      </label> 
     {% endfor %} 
    </div> 
{% endblock _requestform_1_status_widget %} 

bu requestForm kimliği 1 sadece çalışacak ve blok isimleri izin vermeyerek değişkenleri dal nedeniyle diğer kimlik değerlerinin, yani {% block _requestform_VARIABLE_status_widget %} için çalışmaz fark etmiş olabileceğiniz gibi.

Herhangi bir yardım çok takdir! Teşekkürler

cevap

0

Benim bağırsak duygularım, input_type = RequestFormType :: class ile bir CollectionType alanı içeren tek bir forma sahip olmak isteyebilirsiniz, ve sonra da, bir formun tamamını "dış" forma uygulayabilirsiniz. İşleri istediğin gibi yönetebilmelisin.

+0

Yanıtladığınız için teşekkür ederiz. Çözümünüzün nasıl uygulanacağını anladığımı düşünüyorum ve işe yarayacağına inanıyorum. Ancak, formun elle oluşturulmasına karar verdim, çünkü yarattığım formun kapsamlı bir şekilde özelleştirilmesi gerektiğini ve Symfony'nin form teması yeteneklerinin sadece mevcut çerçevedeki mevcut yetkinliğimden dolayı bir engel olacağını biliyordum. Şerefe! – 83C10

+0

Hala bir egzersiz olarak denemenizi tavsiye ediyorum, çünkü CollectionType çok güçlü bir araçtır. –

İlgili konular