2017-05-20 79 views
0

我在做購物網站。我製作了Cart Model,它是Singleton。我的購物車始終存在於會話中(無論用戶是否登錄)。現在我必須每次調用每個控制器和getInstance動作來檢查或者有關鍵的「購物車」。 是否有可能爲所有視圖自動執行此操作?Laravel,Singleton - 如何將數據發送到所有控制器?

這裏是我的單身代碼:

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'); 
} 

} 

在這裏,例如它的外觀在控制器和行動:

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(); 
} 

我必須做這一切的時候:$車=車::的getInstance() - > get()方法; 是否有可能只做一次?

回答

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

我想永遠存在購物車。作爲用戶,您可以在不登錄的情況下將產品添加到您的購物車中,但是當您想訂購某物並付款時,您必須進行註冊並登錄。登錄之後,您以前創建的購物車將被添加到您的帳戶(會話用戶)。你說得對。 cartModel將永遠不會被使用:P。我的錯。感謝你的回答! – wenus

相關問題