如何让来自第三方软件包的纯 php 对象继承 Laravels Eloquent 模型的所有优点? 见下文:
下面的模型类来自第三方包。它是框架和ORM不可知的,用普通的PHP编写。我不能改变它,只能扩展它。(仅供参考)
class APlainPHPModelFromLibrary {
protected $someAttribute;
protected $someOtherAttribute;
//...
public function someFunction()
{
// ...
}
}
这是我这个模型类的Laravel Eloquent 版本。我需要从这个类扩展 Eloquent 。此外,我需要从上面的VanillaPHPModel扩展,以便它可以继承Eloquent的方法。我看不出解决这个问题的方法。
class MyEloquentModelVersion extends Eloquent ... extends APlainPHPModelFromLibrary { // ??
$guarded = [
'EloquentGoodness',
'EloquentGoodness'
];
public function belongsTo()
{
//...Eloquent goodness
}
public function hasMany()
{
//,..Eloquent Goodness
}
}
这只是
一个建议。您可能能够以多种其他方式解决它。
第三方服务提供商.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());
});
}
}
第三方服务.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;