在Laravel中,'extends Authenticatable'与'extends Model'有什么区别?

时间:2016-10-06 04:37:12

标签: laravel class model

我有一个具有class User extends Authenticatable的用户模型类和另一个我创建的具有class Foo extends Model的模型类

它在路径文件中显示数据时会出现一些问题,我很确定它与'Authenticatable'部分有关,因为对于Foo,信息显示正确,但对于User,它没有,即使是相同的代码。

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

3 个答案:

答案 0 :(得分:1)

Class Foo extends Model意味着Foo类继承自Model基类。请参阅文档中的Extending Authenticable

答案 1 :(得分:0)

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

仅扩展模型时,就是在创建类或类型,以反映应用程序中拥有的某种资源。

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

Illuminate \ Foundation \ Auth \ User as Authenticateable只是一个类,它附加了一些其他特征,这些特征包括Authenticateable,Authorized,CanResetPassword,MustVerifyEmail。

基础的Illuminate \ Foundation \ Auth \ User类还扩展了模型,从而为您提供了所有您仅希望扩展Model所期望的关系功能。

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

答案 2 :(得分:0)

如果您查看它显示的导入:

use Illuminate\Foundation\Auth\User as Authenticatable;

这意味着 AuthenticatableIlluminate\Foundation\Auth\User 的别名。

如果您查看 Illuminate\Foundation\Auth\User 的源代码,它会显示:

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

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

  • Authenticatable
  • Authorizable
  • CanResetPassword
  • MustVerifyEmail

照亮\验证\可验证

这个是认证用的,增加了以下方法:

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

Illuminate\Foundation\Auth\Access\Authorizable

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

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

Illuminate\Auth\Passwords\CanResetPassword

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

  • getEmailForPasswordReset()
  • sendPasswordResetNotification()

Illuminate\Auth\MustVerifyEmail

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

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

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

此外,基于上述内容,我怀疑您的路由文件中的数据是否存在任何问题。