开箱即用,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功能?也许是一个特质?似乎没有关于此使用模式的任何文档。