某些软件包预先打包了自己的模型,例如Cart
,但有时我想为该模型添加一些额外的逻辑,
所以不是编辑原始模型或搜索使用此模型的任何地方,而是将其替换为新创建的模型,
我以为我会使用app bind ex。
// model
<?php
namespace App\Binders;
use some\package\Models\Cart;
class CartBinder extends Cart
{
// extra logic
}
// AppServiceProvider@register
$this->app->bind('some\package\Models\Cart', 'App\Binders\CartBinder');
但遗憾的是,这没有效果。我不确定我错过了什么:(。
答案 0 :(得分:2)
我建议你使用Decorator模式装饰模型。 Jeff Way有一个很好的系列Design Patterns 或者查看decorator pattern example。 它可以沿着这条路走:
<?php
namespace App\Binders;
use some\Package\Models\Cart;
class CartBinder
{
protected $cart;
public function __contruct(Cart $cart)
{
$this->cart = $cart;
}
// the extra logic
}
然后,您可以绑定服务容器中的依赖项。
$this->app->bind('App\Binders\CartBinder', function ($app) {
return new \App\Binders\CartBinder(new some\Package\Models\Cart);
});
从那里你可以解决它,以这种方式在代码中的某个地方(控制器,模型......)实例化:
$cart = $this->app->make('App\Binders\CartBinder');
或者你可以注入控制器的方法。
// use App\Binders\CartBinder;
// ...
public function store(CartBinder $cart)
{
// ...
}