Introdução
Symfony é um framework PHP completo para desenvolvimento de aplicações web. Uma das suas funcionalidades mais poderosas é o componente Form, que permite criar e manipular formulários de maneira simples e fácil. Neste artigo, vamos explorar casos de uso avançados com formulários personalizados no Symfony.
Como criar um formulário personalizado?
O primeiro passo para criar um formulário personalizado é definir o tipo do formulário. Isso pode ser feito criando uma classe que estenda a classe AbstractType do Symfony. Essa classe deve implementar o método buildForm, onde todos os campos do formulário são definidos.
Por exemplo, vamos criar um formulário de cadastro de usuário. A classe UserType poderia ser definida como:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('email', EmailType::class)
->add('password', PasswordType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
Aqui, estamos adicionando campos para o nome, e-mail e senha do usuário. O método configureOptions também é importante. Aqui, estamos definindo a classe de dados que será usada para preencher e manipular o formulário.
Como utilizar um formulário personalizado?
Uma vez definido o tipo do formulário, podemos utilizá-lo em qualquer lugar da nossa aplicação. Por exemplo, podemos criar uma action em um controller para exibir e processar o formulário:
Por exemplo:
class UserController extends AbstractController
{
/**
* @Route("/register", name="user_register")
*/
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
// cria um novo usuário
$user = new User();
// cria o formulário para registrar o usuário
$form = $this->createForm(UserType::class, $user);
// processa o envio do formulário
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// criptografa a senha do usuário
$encodedPassword = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
$user->setPassword($encodedPassword);
// salva o novo usuário no banco de dados
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('homepage');
}
// exibe o formulário
return $this->render('user/register.html.twig', [
'form' => $form->createView(),
]);
}
}
Aqui, estamos criando um formulário para cadastrar um novo usuário. A classe UserType é passada como argumento para a criação do formulário, juntamente com uma nova instância da classe User. A função handleRequest é chamada para processar o envio do formulário. Se o formulário for válido, a senha do usuário é criptografada e o novo usuário é salvo no banco de dados. Caso contrário, o formulário é exibido novamente com mensagens de erro.
Conclusão
Os formulários personalizados são uma poderosa ferramenta do Symfony para criar interfaces de usuário personalizadas e flexíveis. Com as dicas apresentadas neste artigo, você poderá criar formulários ainda mais úteis e eficientes em seus projetos Symfony.