Symfony - создайте второй класс пользователя - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть App \ Entity \ User Class.

Я хочу создать нового пользователя, но без адреса электронной почты. НО в моем классе User электронная почта уникальна и не может быть нулевой.

Это означает, что мне нужно создать новый класс User с именем TransUser.

Теперь я хочу иметь возможность использовать этот класс как класс App \ Entity \ User, но без столбца email - или, по крайней мере, со столбцом электронной почты, который не является уникальным и может иметь значение null.

Каков наилучший способ сделать это в php с Symfony?

С наилучшими пожеланиями Майкл

Ответы [ 3 ]

2 голосов
/ 19 апреля 2019

https://www.doctrine -project.org / projects / doctrine-orm / ru / 2.6 / tutorials / override-field-association-mappings-in-subclasses.html

/**
 * @ORM\Entity
 * @ORM\Table(name="user2")
 *
 * @ORM\AttributeOverrides({
 *      @ORM\AttributeOverride(name="email",
 *          column=@ORM\Column(
 *              name     = "email",
 *              type     = "string",
 *              nullable = true
 *          )
 *      ),
 *      @ORM\AttributeOverride(name="emailCanonical",
 *          column=@ORM\Column(
 *              name     = "email_canonical",
 *              type     = "string",
 *              nullable = true
 *          )
 *      )
 * })
 *
 */
class User2 extends User
{

}
2 голосов
/ 19 апреля 2019

у вас может быть столько классов для пользователей, сколько вы хотите, вам нужно только определить эти новые классы как провайдера пользователей в вашем security.yaml в разделе провайдеров, например, вы можете иметь внутренних пользователей помимо обычных пользователей.Вот как выглядит раздел вашего провайдера в security.yaml

providers:
    backend_users:
        entity:
            class: App\Entity\BackendUser
    users:
        entity:
            class: App\Entity\User

и т. д., вы можете узнать больше об этом здесь .вам нужно обновить части брандмауэра, если вы хотите ограничить тип пользователей, посещающих некоторые маршруты, и добавить ключ провайдера для каждого брандмауэра, что-то вроде этого

main:
 logout:
   path: app_logout
 anonymous: true
 provider: backend_users
 guard:
    #....

вы можете найти об этом здесь

1 голос
/ 19 апреля 2019

вы можете изменить свой класс User, чтобы разрешить нулевые адреса электронной почты. (UNIQUE все еще позволяет это).

однако при регистрации / валидации / входе в систему вам в конечном итоге придется различать разные типы пользователей.

это решение - несколько классовых расширений (или наследование одной таблицы). Но где-то у вас, вероятно, будет столбец квази-дискриминатора. ; О)

очевидно, преимущество в том, что у вас может быть одна пользовательская таблица, что упрощает все ссылочные / внешние ключи.

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