簡體   English   中英

即使表單輸入無效,用戶名也會更改(Symfony)

[英]Username is changed even form input is invalid (Symfony)

目前我正在使用 Symfony 6 開發食譜應用程序。到目前為止一切順利。 現在我想讓用戶更改他的用戶名。 用戶名同時也是用戶標識符。

用戶名也可以修改成功。 我有一個設置用戶名長度的約束。 但是,無論如何都會提交具有無效值的表單,並且用戶會被注銷。

也許我在某個地方犯了錯誤,但我真的很絕望。 其實問題很簡單,就是找不到正確的解決方法。

非常感謝您的幫助!

我的控制器`

<?php

namespace App\Controller;

use App\Form\ProfileUsernameType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class ProfileChangeUsernameController extends AbstractController
{
    #[Route('/profile/changeUsername')]
    public function changeUsername(UserRepository $userRepository, EntityManagerInterface $entityManager, Request $request)
    {
        $user = $this->getUser()->getUserIdentifier();
        $username = $userRepository->findOneBy(['username' => $user ]);

        $form = $this->createForm(ProfileUsernameType::class, $username);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $username->setUsername($form->get('username')->getData());
            $entityManager->persist($username);
            $entityManager->flush();

        }
        return $this->render('profile/changeUsername.html.twig', [
            'form' => $form,
        ]);
    }
}

`

我的表格`

<?php

namespace App\Form;

use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;

class ProfileUsernameType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('username', TextType::class,[
                'data_class' => null,
                'attr' => [
                    'placeholder' => 'Username',
                    'autocomplete' => 'off',
                ],
                'constraints' => [
                    new NotBlank(),
                    new Length(['min' => 5])],
            ])
            ->add('submit', SubmitType::class, ['label' => 'Submit your username'])
            ->getForm();
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

`

我的樹枝文件

`

{% extends 'base.html.twig' %}
{% form_theme form 'bootstrap_5_layout.html.twig' %}

{% block body %}
    {{ form_start(form)}}
    {{ form_errors(form) }}
    {{ form_widget(form.username) }}
    {{ form_row(form.submit) }}
    {{ form_end(form) }}
{% endblock %}

`

前段時間我遇到了同樣的問題並找到了這個解決方案:在你的 ProfileUsernameType.php 中,這樣做:

$builder
    ->add('username', TextType::class, [
                'attr' => [
                    'class' => 'form-control',
                    'readonly' => 'readonly',
                    'value' =>$user['username']
                ],
                'label' => 'Username: '
            ])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM