У меня есть собственный класс пользователей, который наследует 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 своими собственными правилами проверки... но они игнорируются или что-то в этом роде...
У меня нет идей. Я был бы очень признателен, если бы вы могли мне помочь.