Я пытаюсь передать переменную из родительской формы (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 оно установлено по умолчанию.
Спасибо за помощь!