Search code examples
symfonyformbuilder

Symfony FormBuilder Login


i'm using symfony 3.3

I'have created FormBuilder for Login

this is my Route controller:

/**
 * @Route("/login", name="app.login")
 */
public function loginAction()
{
    $form = $this->createForm(LoginType::class);
    return $this->render('@site_theme/UserLogin.html.twig', ['form' => $form->createView()]);
}

and my Twig:

{{ form_start(form, {'action': path('sec_check'), 'method': 'POST'}) }}
    {{ form_errors(form) }}
{{ form_row(form.username) }}
    {{ form_row(form.plainPassword) }}
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}"/>
    {{ form_row(form.submit) }}
{{ form_end(form) }}

My LoginType of FormBuilder:

<?php

namespace AppBundle\Forms;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;

/* TYPES */
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;


class LoginType extends AbstractType
{
    private $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username', EmailType::class, [
                'attr' => ['required' => true, 'placeholder' => 'email'],
                'label' => false
            ])
            ->add('plainPassword', PasswordType::class, [
                'attr' => ['required' => true, 'placeholder' => 'password'],
                'label' => false
            ])
            ->add('submit', SubmitType::class, [
                'label' => 'enter',
                'attr' => ['class' => 'btn-login'],
            ]);
        $request = $this->requestStack->getCurrentRequest();
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($request) {
            if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(Security::AUTHENTICATION_ERROR);
            } else {
                $error = $request->getSession()->get(Security::AUTHENTICATION_ERROR);
            }
            if ($error) {
                $event->getForm()->addError(new FormError($error->getMessage()));
            }
        });
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'csrf_token_id' => 'authenticate',
            'csrf_field_name' => 'login',
            'intention' => 'authenticate',
            'attr' => ['role' => 'form', 'class' => 'navbar-form'],
            'method' => 'POST'
        ]);
    }
}

when i try to login i getting:

Bad credentials.

first of all, how can i print all the data [username,password]

that was send?

how can i fix this issue?

thanks a lot


Solution

  • I fixed it by remove login_username to _username

    $form = $this->get('form.factory')->createNamed(null, LoginType::class);