Метод get класса FormBuilder
Метод get класса FormBuilder возвращает объект элемента формы (FormBuilderInterface) по его имени. Первым параметром передаётся имя элемента формы. Если элемент с таким именем не был добавлен ранее, метод выбросит исключение InvalidArgumentException. Метод удобно использовать, когда нужно изменить уже добавленный элемент: например, поменять его атрибуты, опции или добавить трансформер данных.
Синтаксис
public function get(string $name): FormBuilderInterface
Пример
Давайте создадим форму с двумя полями и получим поле title через метод get, чтобы изменить его атрибуты:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/form', name: 'article_form')]
public function form(): Response
{
$form = $this->createFormBuilder()
->add('title', TextType::class)
->add('save', SubmitType::class)
->getForm();
$title = $form->get('title');
$title->setAttribute('class', 'main-input');
return new Response('form created');
}
}
?>
Результат выполнения кода:
"form created"
Пример
Давайте получим поле через метод get и изменим его опцию label:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/edit', name: 'article_edit')]
public function edit(): Response
{
$builder = $this->createFormBuilder()
->add('title', TextType::class)
->add('content', TextareaType::class);
$title = $builder->get('title');
$title->setAttribute('placeholder', 'Enter title');
$content = $builder->get('content');
$content->setAttribute('rows', 10);
$form = $builder->getForm();
return new Response('form ready');
}
}
?>
Результат выполнения кода:
"form ready"
Пример
Давайте попробуем получить несуществующее поле 'price' и посмотрим, какое исключение выбросит метод:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/bad', name: 'article_bad')]
public function bad(): Response
{
$builder = $this->createFormBuilder()
->add('title', TextType::class);
try {
$builder->get('price');
} catch (\InvalidArgumentException $e) {
return new Response($e->getMessage());
}
return new Response('ok');
}
}
?>
Результат выполнения кода:
"Field "price" does not exist."
Смотрите также
-
класс
FormBuilder,
который строит формы в Symfony -
метод
add,
который добавляет элемент в форму -
метод
has,
который проверяет наличие элемента в форме -
метод
remove,
который удаляет элемент из формы