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

Laravel,Singleton-如何向所有控制器发送数据?,laravel,session,singleton,Laravel,Session,Singleton,我在做购物网站。我制作了购物车模型,它是单体的。我的购物车始终存在于会话中(无论用户是否登录)。现在我必须每次调用每个控制器和操作getInstance来检查是否有键“cart”。 是否有可能对所有视图自动执行此操作 以下是我的单身汉代码: class Cart { private $cartModel; private static $instance; private function __construct() { $this->cartModel = new CartMo

我在做购物网站。我制作了购物车模型,它是单体的。我的购物车始终存在于会话中(无论用户是否登录)。现在我必须每次调用每个控制器和操作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();
有可能只做一次吗?

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


阅读更多信息:

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


阅读更多信息:

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

// app/Http/Controllers/Controller.php

protected $cart;

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

但我真的觉得你的单身班没什么意义。它所做的只是在未定义购物车时将购物车设置为空数组。另外
$this->cartModel=new cartModel()是否使用过它?

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

// app/Http/Controllers/Controller.php

protected $cart;

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

但我真的觉得你的单身班没什么意义。它所做的只是在未定义购物车时将购物车设置为空数组。另外
$this->cartModel=new cartModel()是否曾经使用过此功能?

我希望始终存在。作为一个用户,你可以在不登录的情况下将产品添加到购物车中,但是当你想订购某物并付款时,你必须注册并登录。登录后,您之前创建的购物车将添加到您的帐户(会话用户)。你是对的。cartModel永远不会被使用:P.我的错误。谢谢你的回答!我想永远存在。作为一个用户,你可以在不登录的情况下将产品添加到购物车中,但是当你想订购某物并付款时,你必须注册并登录。登录后,您之前创建的购物车将添加到您的帐户(会话用户)。你是对的。cartModel永远不会被使用:P.我的错误。谢谢你的回答!谢谢你的建议。我写了整个子项目,它也很有效。谢谢你的建议。我写了整个子主题,它也很有效。