Symfony 4: доступ к данным формы без вложенного цикла - PullRequest
0 голосов
/ 11 июля 2019

Я хотел бы получить доступ к объектам, представленным формой, без необходимости использовать вложенный цикл for. В настоящее время для доступа к объектам сущности я делаю следующее:

$courses = $form->getData();

foreach ($courses as $course) {
    foreach ($course as $c) {
        //do logic on entity $c
    }
}

Класс конструктора форм:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('courses', EntityType::class, [
            'class' => Course::class,
            'choice_label' => 'name',
            'multiple' => true,
            'expanded' => true,
            'required' => false,
            'query_builder' => function (EntityRepository $er) use ($organization) {
                return $er->createQueryBuilder('course')
                    ->orderBy('course.semester', 'ASC');
            },
        ]);
    }

Как я могу структурировать форму так, чтобы объекты были доступны с помощью одного цикла for?

1 Ответ

1 голос
/ 11 июля 2019

Ваш звонок на getData() возвращает все формуляр поля , но, поскольку у вас, кажется, есть только одно, он работает как "вы ожидаете", но просто случайно.Если вы решили добавить больше полей, например, поле user, в какой-то момент переменная $course будет содержать объект User.Будет более понятно, если переписать это как $fieldData = $form->getData(), и теперь вы можете думать о нем как о массиве с ключом fieldName.

Вы сможете получить только коллекцию Course (определенное поле) с помощью:

$courses = $form->get('courses')->getData();  
// Or using PropertyAccess: $form['courses']->getData()

foreach ($courses as $course) {
// ...
}
...