Laravel中“ extends Authenticateable”与“ extends Model”有什么区别?

Sim*_*Suh 5 model class laravel

我有一个具有的用户模型类,class User extends Authenticatable并且我也创建了另一个模型类class Foo extends Model

这会在显示路线文件中的数据时引起一些问题,我很确定这与“可验证”部分有关,因为对于Foo,信息正确显示,但对于User,即使使用相同的代码也不会显示。

这两个类/模型有什么区别?

Yah*_*din 6

如果你查看导入,它会显示:

use Illuminate\Foundation\Auth\User as Authenticatable;
Run Code Online (Sandbox Code Playgroud)

这意味着Authenticatable是 的别名Illuminate\Foundation\Auth\User

如果你查看Illuminate\Foundation\Auth\User它的源代码,就会发现:

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
Run Code Online (Sandbox Code Playgroud)

与普通模型基本Authenticatable相同,但增加了以下特征:

  • Authenticatable
  • Authorizable
  • CanResetPassword
  • MustVerifyEmail

照亮\Auth\Authenticatable

这是用于身份验证的,并添加了以下方法:

  • getAuthIdentifierName()
  • getAuthIdentifier()
  • getAuthPassword()
  • getRememberToken()
  • setRememberToken()
  • getRememberTokenName()

照亮\基础\身份验证\访问\可授权

这用于确定用户是否能够执行某些能力。它有以下几个方法:

  • can()
  • canAny()
  • cant()
  • cannot()

照亮\Auth\密码\CanResetPassword

用于重置密码。它有以下几个方法

  • getEmailForPasswordReset()
  • sendPasswordResetNotification()

照亮\Auth\MustVerifyEmail

如果您使用该功能,则用于验证电子邮件。它有以下几个方法:

  • hasVerifiedEmail()
  • markEmailAsVerified()
  • sendEmailVerificationNotification()
  • getEmailForVerification()

我建议尝试自己查看源代码,以更好地理解这些特征的作用。

另外,根据上述内容,我怀疑路线文件中的数据是否存在任何问题。


Ali*_*Ali 0

当您扩展 Authenticatable 时,您将获得更多功能,例如身份验证、授权以及注册内容。因此,每当您有用户、客户或帐户引用人员时,最好创建一个扩展可验证性的新模型。

当您仅扩展模型时,您将创建一个类或类型,作为应用程序中某种资源的反映。

尝试找到 Authenticatable 的定义,您将看到:

作为 Authenticatable 的 Illuminate\Foundation\Auth\User 只是一个附加了一些附加特征的类,如 Authenticatable、Authorizes、CanResetPassword、MustVerifyEmail。

底层的 Illuminate\Foundation\Auth\User 类还扩展了模型,为您提供了如果您只是扩展模型时所期望的所有关系功能。

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
Run Code Online (Sandbox Code Playgroud)