2017-02-14 43 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功能的預期結果。

相關問題