2017-02-14 60 views
0

开箱即用,laravel 5.2带有几个ORM类。最值得注意的是,其中之一是用户ORM类。大多数的ORM模型,必须扩展Illuminate\Database\Eloquent\Model,这看起来是这样的:laravel User.php ORM是否必须扩展Illuminate Foundation Auth User?功能可以通过特质引入吗?

use Illuminate\Database\Eloquent\Model; 
class Articles extends Model { 
... 

然而,用户模型必须扩展Illuminate\Foundation\Auth\User,如果你想使用任何的身份验证功能。这通常被视为像下面这样:

use Illuminate\Foundation\Auth\User as Authenticatable; 
class User extends Authenticatable { 
... 

然而,我所有的ORM文件扩展自定义的ORM类,(其中包含我已经写了一些默认的查询范围界定方法等非常有用的东西),然后,反过来延伸Illuminate \ Database \ Eloquent \ Model。

换句话说

所以,我想有:

Illuminate\Database\Eloquent\Model 
App\Klass\OrmRoot\MyCoolSubClass extends Illuminate\Database\Eloquent\Model 
App\Klass\Orm\User extends MyCoolSubClass 

但我不得不有:

Illuminate\Database\Eloquent\Model 
App\Klass\OrmRoot\MyCoolSubClass extends Illuminate\Database\Eloquent\Model 
App\Klass\Orm\User extends Illuminate\Foundation\Auth\User 

由于PHP不支持polymorhpic继承,说明其时我的班User.php ORM文件扩展后,我必须在用户ORM类(可笑)内的自定义基类ORM类中复制所有方法,或者不让用户ORM类具有用户验证功能。两者似乎都不可行。

是否有任何其他方式在User.php ORM文件中包含Authenticable功能?也许是一个特质?似乎没有关于此使用模式的任何文档。

回答

0

好的,只是想通了。 检查的Illuminate\Foundation\Auth\User的内容,表明它仅包含以下内容:

namespace Illuminate\Foundation\Auth; 
use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Foundation\Auth\Access\Authorizable; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 
class User extends Model implements 
    AuthenticatableContract, 
    AuthorizableContract, 
    CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword; 
} 

有我user.php的ORM文件扩展我的自定义类“MyCoolSubClass”,并确保它也可以实现上述达到显示的所有特征和合同能够使用我的自定义ORM基类的功能以及auth功能的预期结果。

相关问题