Symfony UniqueEntity показывает ошибку на основе существующего объекта - PullRequest
0 голосов
/ 17 апреля 2019

У меня довольно простая сущность с проверкой UniqueEntity:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping\ManyToOne;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity("email", message="Email already in use")
 * 
 *
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     */
    private $email;

Форма (сознательно удалены все остальные поля формы)

<?php
/**
 * Created by PhpStorm.
 * User: jochen
 * Date: 18/12/18
 * Time: 12:15 PM
 */
namespace App\Form;

use App\Entity\Company;
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;


class UserType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add( 'email', EmailType::class,[
                'label' => 'Email'
            ] );


        $builder->add( 'save', SubmitType::class, [
            'attr' => [
                'class' => 'btn btn-primary',
                'id' => 'btn-user-form'
            ],
            'label' => 'Save'
        ] );

    }


    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults( [
            'data_class' => 'App\Entity\User'
        ]);

    }


    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'user';
    }
}

и контроллер:

public function edit(User $user, RequestStack $request)
{
    $em = $this->getDoctrine()->getManager();
    $form = $this->createForm( UserType::class, $user);

    $form->handleRequest($request->getCurrentRequest());

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

        $em->persist( $user);
        $em->flush();

        $this->addFlash('success', 'User updated.');
        return $this->redirectToRoute('user_index');
    }

    return $this->render('user/update.html.twig', [
        'form' => $form->createView(),
        'deleteForm' => $this->createDeleteForm($user)->createView()
    ]);

}

Когда я сохраняю существующую запись, я получаю сообщение об ошибке «Электронная почта уже используется» (как указано мной)

Конечно, он уже существует, но в той же записи. Я должен использовать разные объекты для вставки и обновления или как UniqueEntity предназначен для использования?

Symfony 4.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...