【发布时间】:2016-04-11 17:47:04
【问题描述】:
我对 laravel 很陌生(使用 5.2,这是迄今为止的最新版本),因此我有以下两难境地:我知道 Laravel 带有一个开箱即用的 User 类,但我想开发在这个系统中,我可以拥有另外两种类型的用户,分别称为 Researcher 和 Admin。
我主要需要创建完全不同的用户类别(研究员和管理员),可能继承自 User,因为它们之间的业务逻辑几乎 100% 不同,我不想在数据库中创建一个列来分类用户的类型。此外,股票User、Admin 和Researcher 类之间重叠的字段并不多。
我的主要问题是:如果我从 User 继承其他 2 个类,那么一切是否仍能正常工作(Auth Controller、启用中间件等)?我知道 OOP 的原理,凭直觉,我认为如果我执行以下操作应该没问题:
//'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 框架。
干杯!
【问题讨论】:
-
如果您希望为用户提供多个类进行身份验证,请阅读以下主题:stackoverflow.com/questions/34490600/… 希望对您有所帮助!
标签: php oop laravel laravel-5 laravel-5.2