Я довольно новичок в laravel (используя 5.2, которая является последней версией на сегодняшний день), поэтому у меня есть следующая дилемма: я знаю, что Laravel поставляется с классом User
прямо из коробки, но я хочу разработать систему, У меня могут быть еще два типа пользователей: Researcher
и Admin
.Могу ли я создать новый класс, который наследуется от пользователя в Laravel 5.2?
Моя основная потребность в создании совершенно разных классов пользователей (Исследователь и Администратор), возможно наследующих от User
, потому что бизнес-логика почти на 100% отличается от них, и я бы не хотел создавать столбец в базе данных для классификации тип пользователя. Кроме того, не так много полей, которые перекрываются между запасами User
, Admin
и Researcher
классами.
Мой главный вопрос: будет ли все еще работать одинаково (Auth Controller, middleware enabled и т. Д.), Если я наследую от User
для других моих 2 классов? Я знаю, что принципы объектно-ориентированного программирования и интуиции, я полагаю, я должен быть хорошо, если я следующее:
//'Stock' User class:
//
class User extends Authenticatable{
//Any overlapping logic between Researcher and Admin.
}
class Researcher extends User{
//My class definition here.
}
class Admin extends User{
//My class definition here.
}
И затем использовать оба класса, как я обычно использую экземпляр класса User
. Под этим я подразумеваю использование всех методов и прямо из коробки User
.
ВОПРОС РАСШИРЕНИЕ: Во время написания мой вопрос, я понимаю, что класс User
выглядит так по умолчанию:
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
Может я не просто следующее вместо унаследованного от User
создать мои другие 2 класса (Researcher
& Admin
):
//Researcher Class:
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Researcher extends Authenticatable
{
//Class definition...
}
...
//Admin Class:
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
//Class definition
}
в этом подходе, я пытаюсь 'имитируют' на User
класс. Дело в том, что я не знаю, есть ли какая-либо логика в ядре, которая жестко запрограммирована, и неявно ссылается на класс User
.
Любые мысли и помощь будут высоко оценены. Извините, если это глупо для вас. Я только начинаю с рамки laravel.
Cheers!
Я думаю, что лучше всего здесь идти с вашим подходом. Единственное, что я хотел бы знать, - где я могу зарегистрировать этого нового провайдера? Я полагаюсь на 'App \ config \ app.php', я прав? Моя первая мысль заключалась в том, чтобы создать как под «Illuminate \ Auth \» как «EloquentAdminProvider», так и «EloquentResearcherProvider», но тогда это не имеет большого смысла, поскольку оно не является частью пакета Illuminate. Я думаю, что я создам обоих поставщиков в «пользовательском» каталоге 'App \ Custom \ Providers \'. – idelara
@JackGal: вы можете создать специализированного поставщика услуг, в котором вы можете зарегистрировать новый 'EloquentResearcherProvider'. и заставить приложение использовать его вместо стандартного 'EloquentUserProvider'. Вы никогда не должны писать свой код в папке «vendor» – Moppo