Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Ajax时如何访问购物车id的会话变量?如何设置属性?_Php_Laravel_Laravel 5.7 - Fatal编程技术网

Php 使用Ajax时如何访问购物车id的会话变量?如何设置属性?

Php 使用Ajax时如何访问购物车id的会话变量?如何设置属性?,php,laravel,laravel-5.7,Php,Laravel,Laravel 5.7,5.3更新laravel后,开发者无法访问构造函数中的会话变量。问题是-如何使用基于会话购物车Id的属性设置购物车控制器 举个例子: class CartController extends Controller { public $cartId; public $cartProducts; public function __construct() { $this->cartId= $this->getCartId(); $this->car

5.3更新laravel后,开发者无法访问构造函数中的会话变量。问题是-如何使用基于会话购物车Id的属性设置购物车控制器

举个例子:

class CartController extends Controller
{
    public $cartId;
    public $cartProducts;

public function __construct()
{
    $this->cartId= $this->getCartId();
    $this->cartProducts = $this->getCartProducts();
}

public function getCartProducts()
{
    return CartProduct::with('product')->where('id_cart', $this->getCartId())->get();
}

public function getCartId()
{
    $sessionCartId = Session::get('cartId');
    $cookieCartId = Cookie::get('cartId');

    if ($cookieCartId) {
        $cartId = $cookieCartId;
        Session::put('cartId', $cartId);
    } elseif ($sessionCartId) {
        $cartId = $sessionCartId;
        Cookie::queue('cartId', $cartId, 10080);
    } else {
        $cartId = $this->setNewCart();
    }

    return $cartId;
}
在本例中,当我通过ajax调用getCartProducts以获取产品列表时,我需要调用方法getCartId,而不是属性$this->cartId。这还不错,但当我调用更复杂的操作(如删除和刷新表)时,getCartId方法将被多次调用,从而导致多个查询。现在,如果我可以访问该属性,我可以在一个查询中获得cartId

所以问题是-如何解决这个问题?

您可以使用中间件闭包访问\uu构造中的会话数据:


我已经测试过这个解决方案,但它不起作用。我在我的_____________________________________。属性为空。当然,当我调用新的对象方法$this->getCartId时,它返回了一个变量。在我的示例中,如果您有一个新函数公共函数视图{print_r$this->cardd;},那么如果通过路由调用该函数,它应该显示购物车id。我再次检查了代码,现在它可以工作了。也许我上次错过了什么。谢谢你的帮助:!也许您也知道这个问题的答案-当我在其他类(如order)中创建新的购物车实例并调用购物车属性$this->cartId时,正如上面代码中所示,我无法访问任何属性。购物车看起来像是空的,没有激活的构造函数。为什么会这样?这里有一些测试代码:
public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->cartId = $this->getCartId();
        $this->cartProducts = $this->getCartProducts();

        return $next($request);
    });
}