Symfony-创建第二个用户类

时间:2019-04-19 12:32:48

标签: php symfony inheritance

我有App \ Entity \ User类。

我想创建一个新用户,但没有电子邮件地址。 但是在我的User类中,电子邮件是唯一的,不能为null。

这意味着我必须创建一个名为TransUser的新User类。

现在,我希望能够将此类作为与App \ Entity \ User类相同的类,但不包含email-列,或者至少具有不唯一且可以为null的email列。

在PHP中使用Symfony做到这一点的最佳方法是什么?

最好的问候 迈克尔

3 个答案:

答案 0 :(得分:2)

您可以根据需要为用户提供尽可能多的类,只需在提供者部分的security.yaml中将此新类定义为用户提供者,例如,可以在常规用户旁边拥有后端用户。这就是security.yaml中您的提供者部分的样子

<?php

namespace App\Notifications\Auth;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class PasswordResetRequest extends Notification implements ShouldQueue
{
    use Queueable;

    protected $token;

    public function __construct($token)
    {
        $this->token = $token;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        $url = url('/password/find/'.$this->token);
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url($url))
            ->line('If you did not request a password reset, no further action is required.');
    }
}

,依此类推,您可以找到有关here的更多信息。 如果您想限制到达某些路由的用户类型并为每个防火墙添加提供者密钥,则需要更新防火墙部分

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

您可以找到有关here

的信息

答案 1 :(得分:2)

https://www.doctrine-project.org/projects/doctrine-orm/en/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 :(得分:1)

您可以修改User类以允许使用空电子邮件地址。 (UNIQUE仍然允许这样做。)

但是,最终您必须在注册/验证/登录时区分不同的用户类型。

此解决方案是类扩展(或单表继承)。但是在某个地方,您可能会有一个准区分列。 ; o)

显然,这样做的好处是,您可以有一个用户表,这使所有引用/外键更加容易。