Laravel用户模型需要多个扩展

时间:2019-09-20 16:08:25

标签: laravel laravel-5

我重新安装了Laravel,并安装了默认的Web身份验证和电子邮件验证(使用默认软件包并与artisan一起安装)。这使我的用户模型扩展了Authentication和MustVerifyEmail,如下所示:

class User extends Authenticatable implements MustVerifyEmail {...}

由于这是一个模型,所以我想实现与其他模型的关系,例如Post可以有很多注释。我不能使用Model类,因为我不能扩展两个类。那么该问题的解决方案/替代方案是什么?

1 个答案:

答案 0 :(得分:0)

对于希望使用 Laravel身份验证和电子邮件验证并且还想使用Model扩展用户类的任何人,他们都会遇到这种情况,即该类已经看起来很像像这样的东西:

class User extends Authenticatable implements MustVerifyEmail {...}

要在Laravel中使用模型关系,您需要使用模型扩展用户,就像这样:

class User extends Model
{
    //
}

这是一个问题,PHP仅允许一个类从另一个类扩展。因此,我们可以从Authenticatable或Model

扩展

@matticustard已经提到“可认证已经扩展了模型”。因此,我们只需要扩展Model就可以了。

如果已实现MustVerifyEmail,则进行上述更改将由于未声明以下方法而产生错误:'hasVerifiedEmail','markEmailAsVerified','sendEmailVerificationNotification'和'getEmailForVerification'。

对于此问题,只需定义如下方法:

/**
 * Determine if the user has verified their email address.
 *
 * @return bool
 */
public function hasVerifiedEmail()
{
    return ! is_null($this->email_verified_at);
}

/**
 * Mark the given user's email as verified.
 *
 * @return bool
 */
public function markEmailAsVerified()
{
    return $this->forceFill([
        'email_verified_at' => $this->freshTimestamp(),
    ])->save();
}

/**
 * Send the email verification notification.
 *
 * @return void
 */
public function sendEmailVerificationNotification()
{
    $this->notify(new Notifications\VerifyEmail);
}

/**
 * Get the email address that should be used for verification.
 *
 * @return string
 */
public function getEmailForVerification()
{
    return $this->email;
}

注意:上面的代码仅来自Illuminate \ Auth \ MustVerifyEmail中定义的特征;

这是一个对我有用的解决方案,如果您有任何建议或其他解决方案,请在下面随时回答/评论。