Из коробки, 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? Может быть, как черта? Кажется, что нет никакой документации относительно этого шаблона использования.