2015-10-26 3 views
1

Так я столкнулся это странное поведением при перечислении ряда флажков с веткойКак контролировать отмеченный заказ флажка в веточке

увидеть новую страницу, он отображает все правильно, и сказал, что я коплю эту лабораторию

img1 enter image description here

нормально, я спас лабораторию, теперь пошел на странице редактирования

img2 enter image description here

отмеченные флажки отображаются сначала, разрушая алфавитный заказ, который был на новой странице.

Мне нужно, чтобы страница редактирования стала точно такой же, как новая страница, но я не знаю, как организовать эти флажки на веточке.

блок, который делает флажков:

{% block _appbundle_laboratory_laboratoryExams_row %} 
    <div class="form-group"> 
     {{ form_label(form) }} 
     <div class="col-md-10 col-md-offset-2"> 
      <div class="app-checkbox-collection"> 
       <p>{{ 'laboratory.field_laboratory' | trans }}</p> 
       {% dump(form) %} 
       {% for child in form %} 
        {% if child.exam.vars.data.type == constant('AppBundle\\Entity\\ExamLaboratory::TYPE')%} 
         {{ form_widget(child.permission, { 
          'attr' : { 
           'class' : 'exam-checkbox' 
          }, 
          'label' : child.exam.vars.data.name 
         }) }} 
        {% endif %} 
       {% endfor %} 
       <p>{{ 'laboratory.field_image' | trans }}</p> 
       {% for child in form %} 
        {% if child.exam.vars.data.type == constant('AppBundle\\Entity\\ExamImage::TYPE')%} 
         {{ form_widget(child.permission, { 
          'attr' : { 
           'class' : 'exam-checkbox' 
          }, 
          'label' : child.exam.vars.data.name 
         }) }} 
        {% endif %} 
       {% endfor %} 
      </div> 
     </div> 
    </div> 
{% endblock %} 

Я не прошу у португальская StackOverflow, потому что никто не отвечает на Symfony вопросы там, некоторые пользователи, вероятно,

EDIT:

Вот это buildForms :

Лабораторное оборудование

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name', null, array(
       'label' => 'laboratory.name', 
       'attr' => array('class' => 'focus') 
      ))     
      ->add('leader', null, array(
       'label' => 'laboratory.leader' 
      ))     
      ->add('city', null, array(
       'label' => 'laboratory.city', 
       'placeholder' => 'action.select_one' 
      )) 
      ->add('laboratoryExams', 'collection', array(
       'label' => 'laboratory.laboratoryExams', 
       'type' => new LaboratoryExamType(), 
       'allow_delete' => true, 
       'by_reference' => false, 
      )) 
     ; 
    } 

LaboratoryExam

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('permission', null, array(
       'label' => 'laboratoryexam.permission', 
      )) 
      ->add('exam', null, array(
       'label' => 'laboratoryexam.exam', 
      )) 
     ; 
    } 

ответ

0

спасибо за ответы, я нашел решение, прибегая к ArrayCollection в форме.

$iterator = $form->get('laboratoryExams')->getData()->getIterator(); 
$iterator->uasort(function ($a, $b) { 
    return ($a->getExam()->getName() < $b->getExam()->getName()) ? -1 : 1; 
}); 
$form->get('laboratoryExams')->setData(new ArrayCollection(iterator_to_array($iterator))); 

ИМО это должно быть сделано по умолчанию, я считаю, что никто не хотел бы иметь флажки неупорядоченные таким образом

1

Я бы сказал, что не имеет ничего общего с веткой.

Это будет установлено на объекте типа формы, где будет сформирована форма с флажками.

Похоже, что данные заполняются программным способом при создании формы с уже выбранными вариантами, являющимися первыми.

Если это не так, или у вас возникли проблемы, отредактируйте свой вопрос с помощью кода формы и кода, где вы получите данные для этих флажков.

2

Вы можете установить порядок флажков при построении формы:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('permission', 'entity', [ 
     'class' => 'Acme\AppBundle\Entity\Parameter', 
     'multiple' => true, 
     'expanded' => true, 
     'query_builder'=> function(EntityRepository $repository) { 
      return $repository->createQueryBuilder('exam')->orderBy('exam.title', 'ASC'); 
     }, 
    ]); 
} 
+0

сделал это, но это дает мне ряд отборных коробок вместо флажков – jbrunoxd

+0

@ jbrunoxd Я обновил свой ответ по этому вопросу –