Метод getParent
Метод getParent принадлежит классу Form и возвращает
родительскую форму для текущей формы. Если форма является корневой,
метод вернёт null. Параметров метод не принимает. Метод
удобен при работе с вложенными формами, когда нужно получить доступ
к родительскому элементу и его данным из дочерней формы.
Синтаксис
public function getParent(): ?FormInterface
Пример
Давайте создадим форму с вложенной формой и получим родителя для вложенной формы:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class FormController extends AbstractController
{
public function index(): Response
{
$parent = $this->createFormBuilder()
->add('name', TextType::class)
->add('child', FormType::class)
->add('save', SubmitType::class)
->getForm();
$child = $parent->get('child');
$res = $child->getParent();
echo $res->getName();
return new Response();
}
}
?>
Результат выполнения кода:
"form"
Пример
Давайте проверим, что для корневой формы метод возвращает
null:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class FormController extends AbstractController
{
public function index(): Response
{
$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('save', SubmitType::class)
->getForm();
$res = $form->getParent();
var_dump($res);
return new Response();
}
}
?>
Результат выполнения кода:
null
Пример
Давайте получим данные родительской формы из дочерней формы:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class FormController extends AbstractController
{
public function index(Request $request): Response
{
$parent = $this->createFormBuilder()
->add('name', TextType::class)
->add('child', FormType::class)
->add('save', SubmitType::class)
->getForm();
$parent->handleRequest($request);
$child = $parent->get('child');
$root = $child->getParent();
if ($root->isSubmitted() && $root->isValid()) {
$data = $root->getData();
echo $data['name'];
}
return new Response();
}
}
?>
Результат выполнения кода для отправленной формы со значением
'abcde':
"abcde"