I Am new on Symfony and I have developed a basic user login with AJAX. The form is blocked in validation.
Below I included 3 files, the form "UsersType", an entity "Users" and a controller "UserController".
UsersType class:
class UsersType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('pseudo')
->add('pseudo_change')
->add('last_name')
->add('first_name')
->add('phone')
->add('image_path')
->add('image_path_change')
->add('cover_image_path')
->add('cover_image_path_change')
->add('email', EmailType::class, ['constraints' => new NotBlank(['message' => 'User name cannot be blank'])])
->add('about')
->add('quote')
->add('quote_change')
->add('gender')
->add('birthday')
->add('location')
->add('postal_code')
->add('address')
->add('additional_info')
->add('timezone')
->add('time_format')
->add('date_format')
->add('facebook')
->add('twitter_x')
->add('instagram')
->add('linkedin')
->add('pinterest')
->add('youtube')
->add('privacy_see_profile')
->add('privacy_see_profile_activity')
->add('privacy_see_profile_friends')
->add('privacy_see_profile_progress')
->add('privacy_see_profile_watched')
->add('privacy_see_profile_watchlist')
->add('privacy_see_profile_favorites')
->add('privacy_see_profile_ratings')
->add('privacy_see_profile_lists')
->add('privacy_see_profile_badges')
->add('privacy_see_profile_comments')
->add('privacy_see_profile_ideas')
->add('noti_series_airing')
->add('noti_new_series')
->add('noti_movie_release')
->add('noti_friend_request')
->add('noti_comment_reply')
->add('noti_comment_like')
->add('noti_list_comment')
->add('noti_list_like')
->add('noti_idea_comment')
->add('noti_idea_like')
->add('password', TextType::class, ['constraints' => new NotBlank(['message' => 'User name cannot be blank'])])
->add('is_banned')
->add('is_activated')
->add('validation_code')
->add('reputation')
->add('is_visible')
->add('count_site_visit')
->add('ip')
->add('last_update_in_points')
->add('last_activity')
->add('register_date', DateTimeType::class, [
'by_reference' => true,
])
->add('update_date', DateTimeType::class, [
'required' => true,
])
->add('country', EntityType::class, [
'class' => Countries::class,
'choice_label' => 'id',
'required' => false,
])
->add('usersVip', EntityType::class, [
'class' => UsersVip::class,
'choice_label' => 'id',
'required' => false,
])
->add('customers', EntityType::class, [
'class' => Customers::class,
'choice_label' => 'id',
'required' => false,
])
->add('usersRole', EntityType::class, [
'class' => UsersRole::class,
'choice_label' => 'id',
'required' => false,
])
->add('bans', EntityType::class, [
'class' => Bans::class,
'choice_label' => 'id',
'required' => false,
])
->add('online', EntityType::class, [
'class' => Online::class,
'choice_label' => 'id',
'required' => false,
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Users::class,
]);
}
}
Users entity:
#[ORM\Entity(repositoryClass: UsersRepository::class)]
class Users implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $pseudo = null;
#[ORM\Column(options: ["default" => 0])]
private ?int $pseudo_change = null;
#[ORM\Column(length: 255)]
private ?string $last_name = null;
#[ORM\Column(length: 255)]
private ?string $first_name = null;
#[ORM\Column(length: 100, nullable: true)]
private ?string $phone = null;
#[ORM\Column(length: 255)]
private ?string $image_path = null;
#[ORM\Column(options: ["default" => 0])]
private ?int $image_path_change = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $cover_image_path = null;
#[ORM\Column(options: ["default" => 0])]
private ?int $cover_image_path_change = null;
#[ORM\Column(length: 180, unique: true)]
private ?string $email = null;
/**
* @var string The hashed password
*/
#[ORM\Column]
private ?string $password = null;
Controller:
/**
*
* We show login page for connection
*
* @return response
*/
#[Route('/login', name: '_login')]
public function login(TranslatorInterface $translator,
Request $request,
UsersService $usersService): Response
{
//$users = new Users();
$form = $this->createForm(UsersType::class);
$form->handleRequest($request);
if ($request->isXmlHttpRequest()){
if ($form->isSubmitted() && $form->isValid()) {
// Récupérer les données du formulaire
$formData = $form->getData();
return new JsonResponse(['status' => 'success', 'message' => 'Connexion réussie']);
}
}else{
return $this->render('user/login.html.twig', [
'head_title' => $translator->trans('user_login', [], 'user').' | '.$this->settingsService->getParticularSetting('site_name')->getValue(),
'head_description' => $translator->trans('user_login_meta_description', [], 'user'),
'user_form' => $form
]);
}
}
When I submit the form, the validator is returning false I don't know why.
When isValid() function is not added the form is processing correctly.
UPDATE:
A token field was missing in my form, that's why I'm getting this error. NOW IT'S FIXED