Sim*_*Suh 5 model class laravel
我有一个具有的用户模型类,class User extends Authenticatable并且我也创建了另一个模型类class Foo extends Model
这会在显示路线文件中的数据时引起一些问题,我很确定这与“可验证”部分有关,因为对于Foo,信息正确显示,但对于User,即使使用相同的代码也不会显示。
这两个类/模型有什么区别?
如果你查看导入,它会显示:
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相同,但增加了以下特征:
AuthenticatableAuthorizableCanResetPasswordMustVerifyEmail这是用于身份验证的,并添加了以下方法:
getAuthIdentifierName()getAuthIdentifier()getAuthPassword()getRememberToken()setRememberToken()getRememberTokenName()这用于确定用户是否能够执行某些能力。它有以下几个方法:
can()canAny()cant()cannot()用于重置密码。它有以下几个方法
getEmailForPasswordReset()sendPasswordResetNotification()如果您使用该功能,则用于验证电子邮件。它有以下几个方法:
hasVerifiedEmail()markEmailAsVerified()sendEmailVerificationNotification()getEmailForVerification()我建议尝试自己查看源代码,以更好地理解这些特征的作用。
另外,根据上述内容,我怀疑路线文件中的数据是否存在任何问题。
当您扩展 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)