наследование — Как наследовать функциональность Eloquent на простых объектах PHP

Как я могу получить простой объект php из стороннего пакета, который унаследует все достоинства моделей Laravels Eloquent? увидеть ниже:


Класс модели ниже от сторонний пакет. это рамки и ORM агностик, написано в простой PHP. Я не могу изменить это, только расширить это. (только пример)

class APlainPHPModelFromLibrary {

protected $someAttribute;

protected $someOtherAttribute;

//...

public function someFunction()
{
// ...
}
}

А вот и моя версия Laravel Eloquent этого модельного класса. Мне необходимо расширить Eloquent из этого класса. Также мне нужно расширить вышеприведенную модель VanillaPHP, чтобы она могла наследовать методы Eloquent. Я не могу найти способ обойти это.

class MyEloquentModelVersion extends Eloquent ... extends APlainPHPModelFromLibrary { // ??

$guarded = [
'EloquentGoodness',
'EloquentGoodness'
];

public function belongsTo()
{
//...Eloquent goodness
}

public function hasMany()
{
//,..Eloquent Goodness
}
}

1

Решение

Это всего лишь предложение. Вы, вероятно, сможете решить ее несколькими другими способами.

ThirdPartyServiceProvider.php

<?php
class ThirdPartyServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('ThirdPartyService', function($app, $third_party_model) {
return new ThirdPartyService($third_party_model, new MyEloquentModelVersion());
});
}
}

ThirdPartyService.php

<?php
class ThirdPartyService {
public $third_party_model         = null;
public $my_eloquent_model_version = null;

function __construct(APlainPHPModelFromLibrary $third_party_model, MyEloquentModelVersion $my_eloquent_model_version) {
$this->third_party_model         = $third_party_model;
$this->my_eloquent_model_version = $my_eloquent_model_version;
}

function translate() {
// conversion code

return $this;
}
}

В вашем контроллере:

$tpsp = App::make('ThirdPartyServiceProvider', $third_party_model);

$tpsp->translate()->my_eloquent_model_version;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]