如何在laravel中将模型绑定到另一个模型

时间:2017-08-09 18:00:47

标签: laravel model-binding

某些软件包预先打包了自己的模型,例如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');

但遗憾的是,这没有效果。我不确定我错过了什么:(。

1 个答案:

答案 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)
{
    // ...
}