$cookieJar->queue(cookie('basket', json_encode($arToBasket), 1000000));
тема закрыта.
]]>Задача, что должно происходить _в целом_, техническое задание:
В общем не чморите сильно, я нубас. Есть корзина на куках, в куке 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>');
}
});
},