Поэтому я столкнулся с этим странным поведением, когда перечислял ряд флажков с веточкой
см. новую страницу, она отображает все правильно и говорит, что я сохраняю эту лабораторию
хорошо, я сохранил лабораторию, теперь перешел на страницу редактирования
отмеченные флажки сначала отображаются, что приведет к разрушению алфавитного порядка, который был на новой странице.
Мне нужно, чтобы страница редактирования стала точно такой же, как новая страница, но я не знаю, как организовать эти флажки на веточке.
блок, который отображает флажки:
{% 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, мало кто, вероятно,
РЕДАКТИРОВАТЬ:
Вот 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',
))
;
}
спасибо за ответы, я нашел решение, прибегнув к 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)));
ИМО это должно быть сделано по умолчанию, я считаю, что никто не хотел бы, чтобы чек-боксы неупорядочены таким образом
Вы можете установить порядок флажков при создании формы:
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');
},
]);
}
Я бы сказал, что это не имеет ничего общего с веточкой.
Это будет установлено на объекте типа формы, где будет сформирована форма с флажками.
Кажется, что данные заполняются программно при создании формы, причем сначала выбранные варианты являются первыми.
Если это не так, или у вас возникли проблемы, отредактируйте свой вопрос с помощью кода формы и кода, где вы получите данные для этих флажков.