Laravel,Singleton - 如何将数据发送到所有控制器?

时间:2017-05-20 15:46:33

标签: laravel session singleton

我正在购物网站。我制作了Cart Model,这是Singleton。我的购物车始终存在于会话中(无论用户是否登录)。现在我必须每次在每个控制器和操作中调用getInstance来检查或者有关键的" cart"。 是否有可能自动为所有视图执行此操作?

这是我的单身人士的代码:

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

我必须一直这样做:$ cart = Cart :: getInstance() - > get(); 是否有可能只这样做一次?

2 个答案:

答案 0 :(得分:1)

你可以利用Laravel的依赖注入。将您的类绑定到IoC容器,您可以通过IoC容器访问它,也可以让Laravel以几种不同的方式自动将其注入您的控制器。

在此处阅读更多内容:https://laravel.com/docs/5.4/container

答案 1 :(得分:1)

将它添加到基本控制器的构造函数中,以便在每个控制器方法上调用它。

seqDiffs = append(seqDiffs, *diff)

但老实说,在你的单身人士课上没有任何意义。它所做的就是在没有定义时为购物车设置一个空数组。还有// app/Http/Controllers/Controller.php protected $cart; public function __construct() { $this-> cart = Cart::getInstance()->get(); } 曾经使用过吗?