Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 12.01.2019 01:44:28

Вопрос по кукам

Версия Laravel: 5.7.20
Версия PHP: 7.2.13
Операционная система и её версия: Linux Mint 18.2
Вендор и версия сервера БД: вопрос не связан с SQL
Вендор и версия Веб-сервера: 2.4.18
Медод подключения PHP: я хз что это значит, ставил пхп из репозитория, наверное Apache Module

Задача, что должно происходить _в целом_, техническое задание:
    В общем не чморите сильно, я нубас. Есть корзина на куках, в куке basket содержится id товара и его количество. При нажатии на кнопку "добавить в корзину" вызывается аякс запрос, который обращается к методу контроллера, в котором пишется кука.
Что произошло, текст ошибки:
    Все работало идеально на версии ларавеля 5.5. После обновления до 5.7 это работать перестало, аякс запрос возвращает ошибку 500 в консоль браузера POST http://entercms/addtobasket 500 (Internal Server Error). Если комментировать строку где я создаю куку, запрос исполняется. Пробую разными способами, через Illuminate\Cookie\CookieJar, Illuminate\Http\Response и даже через стандартную пхпшную setcookie, а нифига кука не пишется и запрос не исполняется.
Чего вы ожидали получить:
    Чтобы кука записывалась.
Варианты/догадки, почему это произошло:
    Ну после обновления до 5.7 это произошло, может что-то изменилось у ларавеля касательно работы с куками, но я не пойму что.
Код:
Routes:

Route::post('/addtobasket','OrderController@addToBasket')->name('item.addtobasket');

Контроллер app\Http\Controllers\OrderController.php, вставил тут только этот проблемный метод для создания куки, остальное убрал во избежание простыни, там методы которые тут не участвуют.

use App;
use App\Order;
use App\Item;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Cookie\CookieJar;
use Symfony\Component\HttpFoundation\Cookie;
use Illuminate\Http\Response;

class OrderController extends Controller
{
    use \App\ImgController;
    use \App\PropEnumController;
    use \App\HandlePropertyController;
    use \App\CategoryTrait;
    use \App\OrderTrait;

    /**
     * Add product to basket
     *
     * @param CookieJar $cookieJar
     * @param Request $request
     */
    public function addToBasket(CookieJar $cookieJar, Request $request)
    {
        $arToBasket = [];

        $arToBasket = $request->cookie('basket');

        $arToBasket[$request->productId] = [
            'id' => $request->productId,
            'quantity' => $request->quantity
        ];

        $cookieJar->queue(cookie('basket', $arToBasket, 1000000));
    }

метод в js для аякс запроса

     /**
     * Add product to basket
     * @param productId
     * @param quantity
     */
    addToBasket: function (productId, quantity) {
        if (!quantity || (quantity == 0) || (quantity < 0)) {
            quantity = 1;
        }

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $.ajax({
            type: "POST",
            url: "/addtobasket",
            data: {productId:productId,quantity:quantity},
            success: function(data) {
                $('.order-button-wrap').html('<button class="order-button add-basket-active callback_content" onclick="enterShop.showBasket()">' +
                    '<i class="glyphicon glyphicon-shopping-cart"></i>' +
                    '<span>В корзине</span></button>');
            }
        });
    },

Не в сети

#2 12.01.2019 17:39:45

Re: Вопрос по кукам

Все, понял, раньше можно было передавать массив, ларавель сам его сериализовал для кук, а теперь нет, нужно сериализовать, а потом записывать массив в куку.
Заработало так:

$cookieJar->queue(cookie('basket', json_encode($arToBasket), 1000000));

тема закрыта.

Не в сети

Подвал раздела