我正在购物网站。我制作了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(); 是否有可能只这样做一次?
答案 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();
}
曾经使用过吗?