Symfony — стандартные массивы AJAX в переменной SymfonyPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Symfony — стандартные массивы AJAX в переменной Symfony

Сообщение Anonymous »

Вот мой шаблон с продуктами для добавления в корзину:
templates\specific\catalog\show.html.twig:

Код: Выделить всё

{% extends 'specific/layout_fo.html.twig' %}

{% block stylesheets %}
{{ parent() }}

{% endblock %}

{% block body %}





{% include 'override/oc/user/basket/_little_basket.html.twig' %}



{% endblock %}

{% block javascripts %}

document.addEventListener('DOMContentLoaded', function () {



// Gérer le clic sur le bouton "Ajouter au panier"
const addToCartButtons = document.querySelectorAll('.add-to-cart-btn');
addToCartButtons.forEach(button => {
button.addEventListener('click', () => {
const productCatId = button.getAttribute('data-product-id');
const inputs = document.querySelectorAll(`input[data-product-id="${productCatId}"]`);

const selectedProducts = Array.from(inputs).map(input => ({
productCatId: input.getAttribute('data-product-id'),
variantId: input.getAttribute('data-variant-id'),
quantity: parseInt(input.value, 10) || 0
})).filter(item => item.quantity > 0);

fetch('{{ path('specific_add_to_cart') }}', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
},
body: JSON.stringify({ products: selectedProducts })
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('Les articles ont été ajoutés au panier avec succès.');
console.log(selectedProducts);
} else {
console.log('Une erreur s\'est produite. Veuillez réessayer.');
}
})
.catch(error => {
console.error('Error:', error);
});
});
});


{% endblock %}
Вот контроллер src\Controller\Specific\CartController.php:

Код: Выделить всё

class CartController extends BaseController
{
#[Route(path: [
'fr' => '/ajouter-au-panier',
], name: 'specific_add_to_cart', methods: ['POST'])]
public function addToCart(Request $request, BasketorInterface $basketor): Response
{
$data = json_decode($request->getContent(), true);

if (!$data || !isset($data['products'])) {
return new JsonResponse(['success' => false, 'message' => 'Invalid data'], Response::HTTP_BAD_REQUEST);
}
$msg = '';
foreach ($data['products'] as $dataProduct) {
$productCatalog = $this->getRepository(ProductCatalog::class)->findOneBy(['id' => $dataProduct['productCatId'], 'active' => true]);
$basketor->addToBasket($productCatalog, $msg, $dataProduct['quantity']);
}

return new JsonResponse(['success' => true]);
}

#[Route(path: '/actualize-basket', name: 'specific_actualize_basket', methods: ['GET'])]
public function getBasket(Request $request, BasketorInterface $basketor): Response
{
$data = \json_encode($basketor->getBasket());

return new JsonResponse([
'success' => true,
'payload' => $data,
]);
}
}
Я хотел бы создать переменную Symfony в _little_basket.html.twig, назовем ее "arrayCart", это будет получать и хранить все «выбранные продукты», отправленные по запросу Ajax, и автоматически обновлять их при каждом запросе. Например, для начала я хотел бы распечатать дамп каждого массива, отправленного запросом AJAX. Позже нам понадобится обработать эти данные, чтобы правильно распечатать корзину и количество.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... y-variable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»