2017-08-09 20 views
0

一部のパッケージには、独自のモデルがあらかじめ組み込まれています。 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'); 

しかし悲しいことに、これは何の効果&を持っていませんが、私が見逃している何:(わからない。

答えて

1

私はあなたが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 

} 

その後、あなたはサービスコンテナに依存関係をバインドすることができます。

$cart = $this->app->make('App\Binders\CartBinder'); 

それともあなたは、コントローラのメソッドに注入できます。そこから、あなたはそれを解決することができます

$this->app->bind('App\Binders\CartBinder', function ($app) { 
    return new \App\Binders\CartBinder(new some\Package\Models\Cart); 
}); 

は、あなたのコードのどこかで(コントローラ、モデル...)この方法をインスタンス化します。

// use App\Binders\CartBinder; 

// ... 

public function store(CartBinder $cart) 
{ 
    // ... 
} 
+0

しかし、このモデルを元の 'some \ Package \ Models \ Cart'ではなく、どのように使用したいのですか? – ctf0

+0

質問タイトルは「新しいモデルを構築する方法ではなく、モデルをlaravelの別のモデルにバインドする方法」です。 – ctf0

+0

@ ctf0私のアプローチは、動作させるために必要なステップの完全な説明です。 Laravel 5.4 https://laravel.com/docs/5.4/container#binding のモデルを拡張することで、ドッキングが必要なモデルを拡張できます。コンストラクタでバインドするモデルを渡す必要があります。 –

関連する問題