#laravel #laravel-8 #laravel-sanctum
#ларавель #laravel-8 #laravel-sanctum
Вопрос:
С одной стороны, у меня есть Красноречивая модель User
, которая расширяется IlluminateDatabaseEloquentModel
. С другой стороны, у меня есть SanctumUser extends Authenticatable
(https://laravel.com/docs/8.x/sanctum#issuing-api-tokens ).
То, что я хотел бы сделать, это, User extends Model, SanctumUser
, но множественное наследование невозможно в PHP 7.x.
Я знаю, что некоторые черты используются в SanctumUser
соответствии с документацией, которую я привел выше. Этими чертами характера являются: use HasApiTokens, HasFactory, Notifiable;
. Знаете ли вы, достаточно ли их, если я удалю extends Authenticatable
и заменю его на extends Model
( User
будет расширен SanctumUser
)?
Комментарии:
1. что такое
WordPressMigrateModel
? вы можете сделать это как признак2. @KamleshPaul ты можешь забыть об этом (я отредактировал ОП 🙂 )
3. Нет, я не могу сделать это признаком
4. вы можете создать средний класс, который
extends Model
затем этот классextends SanctumUser
, а затем этот последний класс в модели5.
Model
то естьIlluminateDatabaseEloquentModel
я не могу заставить его расширятьсяSnctumUser
? Или я не понял.
Ответ №1:
Аутентифицируемый как псевдоним для класса Illuminate Foundation Auth User имеет черты, которые имеют методы аутентификации и авторизации
<?php
namespace IlluminateFoundationAuth;
use IlluminateAuthAuthenticatable;
use IlluminateAuthMustVerifyEmail;
use IlluminateAuthPasswordsCanResetPassword;
use IlluminateContractsAuthAccessAuthorizable as AuthorizableContract;
use IlluminateContractsAuthAuthenticatable as AuthenticatableContract;
use IlluminateContractsAuthCanResetPassword as CanResetPasswordContract;
use IlluminateDatabaseEloquentModel;
use IlluminateFoundationAuthAccessAuthorizable;
class User extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
Даже класс модели пользователя по умолчанию, который доступен с любой новой стандартной установкой Laravel, расширяет класс Authenticable [используйте IlluminateFoundation Auth User как аутентифицируемый;]
Класс модели пользователя по умолчанию в стандартном приложении Laravel имеет еще две характеристики — Notifiable и HasFactory (начиная с Laravel 8.x)
<?php
namespace AppModels;
use IlluminateNotificationsNotifiable;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use HasFactory;
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
'two_factor_recovery_codes',
'two_factor_secret',
];
}
С помощью Sanctum вы можете добавить признак HasApiToken в класс модели пользователя.
Чтобы легко интегрировать Laravel Sanctum или Jetstream или Laravel UI или Breeze для аутентификации и авторизации в ваше приложение, лучше сделать User class extend аутентифицируемым — подключи и играй
Комментарии:
1. Поскольку
Authenticatable
here на самом деле является псевдонимомIlluminateFoundationAuthUser
, который уже расширяетсяModel
и является шаблонной моделью пользователя Laravel, поэтому нет необходимости расширятьModel
себя, поскольку он уже расширен. Однако из вашего вопроса неясно, расширяете ли вы тот жеAuthenticatable
класс2. Authenticable, который является псевдонимом для IlluminateFoundation Auth User , уже расширяет IlluminateDatabase Eloquent Model , поэтому, когда вы расширяете свое приложение Models User из Authenticable, оно уже расширяет класс IlluminateDatabase Eloquent Model через Authenticable
3. нет . Класс
IlluminateFoundationAuthUser
расширяетIlluminateDatabaseEloquentUser
класс и пользовательскую модель проекта вAppModelsUser
extends IlluminateFoundation Auth Псевдоним пользователя, указанный как аутентифицируемый в инструкции use4. Извините, это опечатка в предыдущем комментарии IlluminateFoundationAuth User псевдоним Authenticable расширяет IlluminateDatabaseEloquent Model и
AppModelsUser
расширяет Authenticable5. Смотрите второй блок кода в ответе — это пользовательский класс по умолчанию со стандартной установкой Laravel. Поскольку класс называется User, он не может расширять другой класс с именем User, поэтому в инструкции use IlluminateFoundationAuthUser имеет псевдоним Authenticable