Как получить доступ к переменной сессии для идентификатора корзины при использовании Ajax?Как настроить свойства? - PullRequest
0 голосов
/ 25 марта 2019

После обновления 5.3 разработчики laravel не могут получить доступ к переменной сеанса в конструкторах. Вопрос - как настроить CartController со свойствами, основанными на идентификаторе корзины сеанса?

Просто например:

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 в одном запросе.

Так вот вопрос - как решить эту проблему?

1 Ответ

1 голос
/ 25 марта 2019

Вы можете получить доступ к данным session внутри __construct, используя закрытие middleware:

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->cartId = $this->getCartId();
        $this->cartProducts = $this->getCartProducts();

        return $next($request);
    });
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...