2017-02-14 12 views
0

Из коробки, laravel 5.2 поставляется с несколькими классами 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 расширить пользовательский класс ОРМ, (который содержит некоторые методы областей видимости запроса по умолчанию и другие очень полезные вещи, которые я написал), которые затем , в свою очередь распространяется 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 наследования, когда о том, какой класс мой Файл ORM User.php простирается от меня, я должен выбрать либо дублирование всех методов, которые у меня есть, в моем пользовательском базовом классе ORM внутри класса пользователя ORM (смешно), либо не имеет пользовательского класса ORM, который имеет функцию аутентификации пользователей. Оба кажутся неосуществимыми.

Есть ли другой способ включить функцию Authenticable в ORM-файл User.php? Может быть, как черта? Кажется, что нет никакой документации относительно этого шаблона использования.

ответ

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.