2013-09-03 3 views
3

기본 필드 세트 템플릿을 만들려고합니다. 내가 가지고있는 것은 이것이다 :Symfony2 - 필드 세트 생성

fieldset.html.twig

{% form_theme form _self %} 
{% block form_row %} 
    <fieldset> 
     <legend></legend> 
     {{ form_row(form) }} 
    </fieldset> 
{% endblock %} 

FieldsetType.php

class FieldsetType extends AbstractType 
{ 
    public function __construct($tituloFieldset="") 
    { 
     $this->titulo = $tituloFieldset; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'attr' => array(
       'title'=>$this->titulo 
      ), 
      'mapped'=>false 
     )); 
    } 

    public function getParent() 
    { 
     return 'form'; 
    } 

    public function getName() 
    { 
     return 'fieldset'; 
    } 

    private $titulo; 
} 

현재 사용

$builder->add('nestedform', new FieldsetType('legend')); 

나는 모든 것을 시도했습니다 : 레이블 (필드 렌더링이없는 추가 레이블)로 제목을 추가하고, 전체 양식을 템플리트 화 (이 경우 추가 필드 세트를 추가 할 수 없음) 등등.

어떻게해야합니까?

답변

5

내가 몇 가지 다른 답변과 주변의 아이디어를 내가 몇 가지 프로젝트

https://github.com/adamquaile/AdamQuaileFieldsetBundle에서 필요에 따라, 번들로이 기능을 추출하지만 기반으로 한,이 금액 이것은 :

class FieldsetType extends AbstractType { 

    public function setDefaultOptions (OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults([ 
      'legend' => '', 
      'virtual' => true, 
      'options' => array(), 
      'fields' => array(), 
     ]); 
    } 

    public function buildForm (FormBuilderInterface $builder, array $options) 
    { 
     if (!empty($options['fields'])) { 

      foreach ($options['fields'] as $field) { 
       $builder->add($field['name'], $field['type'], $field['attr']); 
      } 
     } 
    } 

    public function buildView (FormView $view, FormInterface $form, array $options) 
    { 
     if (false !== $options['legend']) { 
      $view->vars['legend'] = $options['legend']; 
     } 
    } 

    public function getName() 
    { 
     return 'fieldset'; 
    } 
} 
+0

'$ field [ 'attr'] [ 'attr']'에'$ field [ 'attr']'을 혼동해서는 안됩니다. 어쩌면 우리는 그것들을'options' 또는 무엇인가로 명명해야합니다. –

+0

예, 당신이 맞습니다 @ 피에르. 이것에 대해 약간의 혼란이있었습니다. 아마 attr을 지키는 child_attrs. 어떻게 생각해? – Adam

+0

Symfony는 HTML 속성에 대해 ['attr'] (http://symfony.com/fr/doc/current/reference/forms/types/form.html#attr)을 기대하기 때문에 작동하지 않습니다. 상위 이름을 변경해야합니다. –

3

올바른 길을 가고 있습니다. 당신은 여기에 간단한 예를 찾을 수 있습니다 https://gist.github.com/spcmky/8512371

+4

것으로 도시 [링크 전용 답변 (http://meta.stackoverflow.com/tags/link-only-answers/info) 낙담, SO 응답은의 종점되어야 솔루션을 검색하십시오 (시간의 흐름에 따라 부실 해지는 경향이있는 참조의 또 다른 중간 기착 대). 링크를 참조 용으로 유지하면서 독립형 시놉시스를 여기에 추가하는 것을 고려해보십시오. – kleopatra