我重新安装了Laravel,并安装了默认的Web身份验证和电子邮件验证(使用默认软件包并与artisan一起安装)。这使我的用户模型扩展了Authentication和MustVerifyEmail,如下所示:
class User extends Authenticatable implements MustVerifyEmail {...}
由于这是一个模型,所以我想实现与其他模型的关系,例如Post可以有很多注释。我不能使用Model类,因为我不能扩展两个类。那么该问题的解决方案/替代方案是什么?
答案 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中定义的特征;
这是一个对我有用的解决方案,如果您有任何建议或其他解决方案,请在下面随时回答/评论。