Электронная почта и имя пользователя SonataUserBundle FOSUserBundle UniqueEntity

У меня есть собственный класс пользователей, который наследует BaseUser (Sonata\UserBundle\Entity\BaseUser) от Sonata.

Моя проблема: если я пытаюсь создать пользователя из администратора сонаты, используя существующую электронную почту, я получаю следующее исключение:

«Не удалось создать объект: Application\Sonata\UserBundle\Entity\User» SQLSTATE[23505]: уникальное нарушение: 7 ОШИБКА: повторяющееся значение ключа нарушает уникальное ограничение DETAIL: ключ (email_canonical)=([email protected]) уже существует.

Я пытался использовать, как это предлагается в некоторых документах и ​​билетах, UniqueEntity, используя правильные операторы использования, но безрезультатно.

Я без проблем использую аннотацию UniqueEntity для других объектов с администратором сонаты, и я получаю приятное сообщение внутри формы, которое уведомляет пользователя о том, что объект с таким именем/названием уже существует вместо исключения. Но для объекта User это просто не работает так же.

Вот как я зарегистрировал пакет пользователя сонаты в AppKernel:

new Application\Sonata\UserBundle\ApplicationSonataUserBundle('FOSUserBundle') 

расширение FOSUserBundle

операторы использования в настраиваемой сущности пользователя (сгенерированной пакетом EasyExtends, просто я добавил несколько настраиваемых столбцов и отношения «один ко многим» с другими сущностями, такими как например: проект):

namespace Application\Sonata\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

и это аннотация для пользовательского класса:

/**
 * User
 *
 * @ORM\Table(name="fos_users")
 * @ORM\Entity
 * @UniqueEntity("username")
 * @UniqueEntity("username_canonical")
 * @UniqueEntity("email")
 * @UniqueEntity("email_canonical")
*/

это моя конфигурация для sonata_user:

sonata_user:
    security_acl: true
    manager_type: orm
    class:
        user:  Application\Sonata\UserBundle\Entity\User
        group: Application\Sonata\UserBundle\Entity\Group

это конфигурация для fos_user:

fos_user:
    db_driver:     orm
    firewall_name: admin, user
    user_class:    Application\Sonata\UserBundle\Entity\User
    group:
        group_class:   Application\Sonata\UserBundle\Entity\Group
        group_manager: sonata.user.orm.group_manager
    service:
        user_manager: sonata.user.orm.user_manager

Я использую пользовательский класс администратора

parameters:
    #use custom user admin class
    sonata.user.admin.user.class: Application\Sonata\UserBundle\Admin\Model\UserAdmin

(Я также пытался использовать класс администратора по умолчанию)

это моя конфигурация администратора сонаты:

sonata_admin: безопасность: обработчик: sonata.admin.security.handler.acl title: Мои шаблоны приложений: макет: CoreBundle:Admin:standard_layout.html.twig

Я также пытался переопределить файл validation.yml/validation.xml своими собственными правилами проверки... но они игнорируются или что-то в этом роде...

У меня нет идей. Я был бы очень признателен, если бы вы могли мне помочь.


person user3854018    schedule 22.07.2014    source источник


Ответы (1)


Это заставило меня работать:

<?php
namespace Application\Sonata\UserBundle\Entity;

...
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
...

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity()
 * @UniqueEntity("username")
 * @UniqueEntity("email")
 */
class User extends AbstractedUser implements UserInterface
...

Важные строки:

 * @UniqueEntity("username")
 * @UniqueEntity("email")
person Indivision Dev    schedule 13.05.2016