2017-02-14 3 views
0

Out of the Box, Laravel 5.2 kommt mit ein paar ORM-Klassen. Vor allem ist eine davon die Benutzer-ORM-Klasse. Die meisten ORM-Modelle müssen Illuminate\Database\Eloquent\Model erweitern, die etwa wie folgt aussieht:Muss Laravel User.php ORM Illuminate Foundation Auth User? Kann Funktionalität über ein Merkmal eingebracht werden?

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

Allerdings muss das Benutzermodell Illuminate\Foundation\Auth\User verlängern, wenn Sie eine der Authentifizierungsfunktionen verwenden möchten. Dies wird in der Regel als so etwas wie die folgenden gesehen:

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

jedoch alle meine ORM-Dateien erweitern, um eine benutzerdefinierte ORM-Klasse (die einige Standardabfrage Scoping Methoden enthält und andere sehr nützliche Dinge, die ich geschrieben habe), die dann , wiederum erweitert Illuminate \ Database \ Eloquent \ Model.

Also mit anderen Worten, ich möchte haben:

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

Aber ich bin zu haben, gezwungen: Unterstützung

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

Da PHP nicht polymorhpic Vererbung, wenn meine die Klasse unter Angabe User.php ORM-Datei erstreckt sich von, ich muss wählen, entweder alle Methoden in meiner benutzerdefinierten Basis-ORM-Klasse innerhalb der Benutzer-ORM-Klasse zu verdoppeln (lächerlich), oder nicht die Benutzer-ORM-Klasse Benutzerauthentifizierungsfunktionalität haben. Beide scheinen undurchführbar.

Gibt es eine andere Möglichkeit, die Authenticable-Funktionalität in eine User.php-ORM-Datei aufzunehmen? Vielleicht als Merkmal? Zu diesem Nutzungsmuster scheint es keine Dokumentation zu geben.

Antwort

0

Ok, habe es herausgefunden. den Inhalt Illuminate\Foundation\Auth\User Überprüfung ergab es nur folgendes enthalten:

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; 
} 

Mit meiner User.php ORM-Datei meine benutzerdefinierte Klasse „MyCoolSubClass“ erweitern, und dafür zu sorgen, dass sie auch alle Züge und Verträge implementiert oben achieves gezeigt das gewünschte Ergebnis, dass ich die Features meiner benutzerdefinierten ORM-Basisklasse zusammen mit den Authentifizierungsfunktionen verwenden kann.

Verwandte Themen