在我开发的插件中,我需要使用静态方法动态扩展另一个插件的模型。我不知道该怎么做。
在我的插件中,我有一个继承自Jiri / JKShop / Models / product
的课程会话对象在jiri_jkshop_products表中,我添加了一个is_course字段。
在创建产品对象之前,我想通过以下方式知道它是否是课程产品:
if (\Jiri\JKShop\Models\Product::isCourse($productJson["product_id"])) {
$product = \PluginAuthor\PluginName\Models\Session::find($productJson["product_id"]);
} else {
$product = \Jiri\JKShop\Models\Product::find($productJson["product_id"]);
}
请问,如何在我的插件的plugin.php文件中动态地向产品模型添加静态方法?
我希望这个想法与优雅的代码相对应,如果你有更好的,我也会采取
提前谢谢你&问候, 帕特里克
答案 0 :(得分:0)
我认为你可以通过插件的启动方法中的可扩展特性实现这一点,就像这样。
你可以利用laravel容器注册一个单例以获得相同的实例,我认为这是一个很好的方法
<?php
class YourPlugin extends PluginBase
{
public function register()
{
$this->app->singleton('my.product', function () {
return new \Jiri\JKShop\Models\Product;
});
}
public function boot()
{
\Jiri\JKShop\Models\Product:::extend(function ($product) {
$product->addDynamicMethod('isCourse', function ($course) use ($product) {
return $product->find($course)->is_course;
});
});
}
}
现在,您可以在插件中的任何位置使用新的动态添加方法
<?php
if(app()->make('my.product')->isCourse($productJson["product_id"])){
$product = \PluginAuthor\PluginName\Models\Session::find($productJson["product_id"]);
}else{
$product = \Jiri\JKShop\Models\Product::find($productJson["product_id"]);
}