2017-05-20 14 views
0

私はショッピングサイトを行っています。私はカートンモデルを作りました。これはシングルトンです。ショッピングカートは常にセッション中に存在します(ユーザーはログインしているかどうかにかかわらず)。今私はすべてのコントローラとアクションgetInstanceをチェックするか、キー "カート"があるたびに呼び出さなければなりません。 すべてのビューでこれを自動的に行う可能性はありますか?私はこのすべての時間を行う必要があるLaravel、Singleton - すべてのコントローラにデータを送信する方法は?

class StoreController extends Controller 
{ 

public function mainSite() 
{ 
    $cart=Cart::getInstance()->get(); 
    return View('zoo'); 

} 

public function showCategory($categoryName) 
{ 
    $cart=Cart::getInstance()->get(); 
    $category = new Category(); 
    $categoryId = (int)$category->getCategoryId($categoryName); 

    $subCategories = Subcategory::where('category_id', $categoryId)->get(); 

    return View('zoo-category', ['subCategories' => $subCategories, 'categoryName' => $categoryName]); 

} 

public function showSubcategory() 
{ 

$cart=Cart::getInstance()->get(); 
} 

:$カート=カート、それはコントローラとアクションにどのように見えるか例えばここ

class Cart 
{ 
private $cartModel; 
private static $instance; 

private function __construct() 
{ 
    $this->cartModel = new CartModel(); 
    $cart = Session::get('cart'); 
    if ($cart == null) { 
     Session::put('cart', array()); 
    } 

} 

private function __clone() 
{ 
} 

public static function getInstance() 
{ 
    if (self::$instance === null) { 
     self::$instance = new Cart(); 
    } 
    return self::$instance; 
} 

public function get(){ 

    return Session::get('cart'); 
} 

} 

そして:ここ

は私のシングルトンのコードです:: getInstance() - > get(); これは1回だけ行うことはできますか?

答えて

1

Laravelの依存関係注入を利用することができます。クラスをIoCコンテナにバインドし、IoCコンテナを使用してクラスにアクセスするか、Laravelに複数の異なる方法でこれを自動的にコントローラに注入させることができます。

はもっとここで読む:それはすべてのコントローラメソッドで呼び出されるように、https://laravel.com/docs/5.4/container

+0

アドバイスありがとうございます。私は全体のサブジェクトを書いて、それも動作します。 – wenus

1

がベースコントローラのコンストラクタに追加します。

// app/Http/Controllers/Controller.php 

protected $cart; 

public function __construct() 
{ 
    $this-> cart = Cart::getInstance()->get(); 
} 

しかし、正直言ってあなたのシングルトンクラスには何のポイントもありません。それが定義されていないときは空の配列でカートを設定します。また$this->cartModel = new CartModel();これはこれまで使用されていますか?

+0

私は常にカートを生きたい。ユーザーは、ログインせずにカートに商品を追加することができますが、sthと支払いを注文する場合は、登録とログインが必要です。ログイン後、あなたが作成したカートウィッチがあなたのアカウント(セッションユーザ)に追加されます。そしてあなたは正しい。 cartModelは決して使用されません:P。私の間違い。答えをありがとう! – wenus

関連する問題