Метод has класса Form
Метод has класса Form проверяет,
существует ли в форме дочерний элемент
с указанным именем. Первым параметром передаётся
имя элемента формы в виде строки. Метод возвращает
true, если элемент найден, и false
в противном случае. Это удобно для проверки
наличия поля перед его извлечением через get.
Синтаксис
public function has(string $name): bool
Пример
Давайте создадим форму с полем title
и проверим наличие этого поля через метод has:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormFormFactoryInterface;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(FormFactoryInterface $factory): Response
{
$builder = $factory->createBuilder();
$builder->add('title', TextType::class);
$builder->add('save', SubmitType::class);
$form = $builder->getForm();
$res = $form->has('title');
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
true
Пример
Давайте проверим наличие несуществующего поля
content в форме:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormFactoryInterface;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(FormFactoryInterface $factory): Response
{
$builder = $factory->createBuilder();
$builder->add('title', TextType::class);
$builder->add('save', SubmitType::class);
$form = $builder->getForm();
$res = $form->has('content');
return new Response(var_export($res, true));
}
}
?>
Результат выполнения кода:
false
Пример
Давайте используем метод has для безопасного
извлечения поля title через метод get:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormFactoryInterface;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(FormFactoryInterface $factory): Response
{
$builder = $factory->createBuilder();
$builder->add('title', TextType::class);
$builder->add('save', SubmitType::class);
$form = $builder->getForm();
$res = 'not found';
if ($form->has('title')) {
$res = $form->get('title')->getName();
}
return new Response($res);
}
}
?>
Результат выполнения кода:
"title"