Как передать переменную из родительской в ​​дочернюю форму в symfony4 - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь передать переменную из родительской формы (TariffType) в дочернюю форму (CalendarType). Переменная приходит из моего контроллера и доступна в родительском TariffType. Есть ли простой способ передать его в CalendarType (дочерний)?

Я пытался получить доступ к дочерней форме через "CollectionType :: class" с entry_options, но он не работает, и я не могу найтипутем прямого использования CalendarType ...

Мой контроллер:

public function editTariff(Tariff $tariff, Request $request, $id, $h_id)
    {
        $test = $this->calendarRepository->findCalendarPerId($id);
        dump($test);

        $formTariff = $this->createForm(TariffType::class, $tariff, [
            'myHome' => $this->homeRepository->find($h_id),
            'myProperty' => $id
            ]);

        $formTariff->handleRequest($request);

        if ($formTariff->isSubmitted() && $formTariff->isValid())
        {
            $this->em->flush();
            return $this->redirectToRoute('admin.index');
        }

        return $this->render('Admin/edit_tariff.html.twig', [
            'formTariff' => $formTariff->createView()
        ]);
    }

Моя родительская форма:

class TariffType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $prop_id = $options['myProperty'];
        dump($prop_id); //this shows the correct value

        $builder
            ->add('tariff_night', null , [
                'label' => 'Tarif nuitée'
            ])
            ->add('tariff_week', null , [
                'label' => 'Tarif semaine'
            ])
            ->add('home', HomeType::class, [
                'data' => $options['myHome'],
                'label' => false
            ])
            ->add('calendar', CalendarType::class, [
                //'data' => $options['myProperty'],
                'label' => false
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Tariff::class,
            'myHome' => 1,
            'myProperty' => 1
        ]);

        $resolver->setRequired('myHome');
        $resolver->setRequired('myProperty');
    }
}

Моя дочерняя форма:

class CalendarType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $prop_id = $options['myProperty'];
        dump($prop_id); //this shows the default value "1"

        $builder
            ->add('cal_period', EntityType::class, [
                'label' => 'Période',
                'class' => Calendar::class,
                'choice_label' => 'cal_period',
                'query_builder' => function(CalendarRepository $repository) use($prop_id) 
                {
                    return $repository->findCalendarPerId($prop_id);
                }
            ])
            ->add('star', null , [
                'label' => 'Astérisque'
            ])
            ->add('property', PropertyType::class, [
                'label' => false
            ])
            ->add('asterisk', AsteriskType::class, [
                'label' => false
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Calendar::class,
            'myProperty' => "1",
            //'inherit_data' => true
        ]);

        $resolver->setRequired('myProperty');
    }
}

Значение $ prop_id внутри TariffType исходит из контроллера, но в CalendarType оно установлено по умолчанию.

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...