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

问题描述:

某些软件包会预先打包自己的模型。 Cart但有时我想一些额外的逻辑添加到模型,如何将模型绑定到laravel中的另一个模型

所以不是编辑原始模型或在使用这个模型,并用新创建的一个替换它到处寻找,

我想我会使用app bind ex。

// model 
<?php 

namespace App\Binders; 

use some\package\Models\Cart; 

class CartBinder extends Cart 
{ 
    // extra logic 
} 


// [email protected] 
$this->app->bind('some\package\Models\Cart', 'App\Binders\CartBinder'); 

但遗憾的是这没有任何影响&我不知道我错过了:(。

我会建议你使用装饰Decorator模式的典范。 杰夫方式具有良好的系列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) 
{ 
    // ... 
} 
+0

但是,laravel如何知道我想使用这个模型而不是原来的'some \ Package \ Models \ Cart'? – ctf0

+0

问题标题是“如何将模型绑定到另一个模型”而不是如何构建新的实现。 – ctf0

+0

@ ctf0我的方法只是为了使其工作而必须采取的步骤的完整说明。您可以在Laravel 5.4上查看关于模型绑定的文档。 https://laravel.com/docs/5.4/container#binding 扩展需要绑定的模型不会使其工作。您必须传递模型以在构造函数中进行绑定。 –