Symfony Кнопка "В корзину"

golfstream

Новичок
Всем доброго времени суток.
Только начинаю разрабатывать в Symfony, сейчас делаю пробный интернет-магазин.

С помощью doctrine сгенерировал контроллер и формы.
Суть вопроса:
Есть формы с отображением всех товаров и БД (/app_product/) и форма просмотра конкретного товара(/app_product/1/show)

В Шаблоне отображающим конкретный товар создал кнопку "В корзину":
{{ form_start(add_to_basket_form) }}
<input type="submit" value="В корзину">
{{ form_end(add_to_basket_form) }}


Сделал соответствующую форму в контроллере:

private function createAddToBasketForm(Product $product)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('app_product_add_to_basket', array('id' => $product->getId())))
->setMethod('GET')
->getForm()
;
}

Сделал Action при нажатии этой кнопки, все работает... но,
хотелось-бы сделать кнопку в форме со списком товаров т.е. чтобы в каждой ячейке товара была кнопка "В корзину"

Вышеуказанным методом ничего не выходит.
URL app_product_add_to_basket содержащий путь /{id}/add_to_basket работает только в случае с форме с конкретным товаром.
Можно сделать например не form_start, а onclick="{{ path"(/...", но в этом случае действие не пройдет в контроллере из за проверок: if ($form->isSubmitted() && $form->isValid()) {....

Как можно в данном случае грамотно поступить?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
чтобы в каждой ячейке товара была кнопка "В корзину"
URL app_product_add_to_basket содержащий путь /{id}/add_to_basket работает только в случае с форме с конкретным товаром.
действия над разными сущностями = разные формы
 

golfstream

Новичок
Все равно не понятно.. Есть контроллер Product, и что, туда надо вписывать разные методы для кнопки "в корзину" для каждой формы?
 

WMix

герр M:)ller
Партнер клуба
а спрашивать "уверенны ли вы" будешь?
 

antson

Новичок
Партнер клуба
@golfstream, ты стоишь на голове . перевернись. Не у товара "положить в корзину"
А Контролер "Корзина"
Методы
добавить
показать
очистить
удалить
новое кол-во товара / увеличить / уменьшить

и лучше для положить не get , а ajax post
 

golfstream

Новичок
@antson, спасибо большое за ответ. А ajax post, чтобы динамически менялась информация о корзине например?

Честно говоря работу с ajax в symfony пока не изучал
 
Последнее редактирование:

antson

Новичок
Партнер клуба
1. csrf защита.
2. поисковики меньше будут ходить.
в роботс запретишь /basket/

в списке можно будет сделать типа такого
<button class='btn-basket' data-basket-type='goods' data-item='ид_товара'></button>

в конце страницы навесить хук на них
$(.'btn-basket').click(function(){
// взять attr('data-...')
$.post({})
// по ответу обновить блок в вашей корзине
})

а контроллер пусть возращает json с результатом операции и новым состоянием корзины.
 

golfstream

Новичок
А как можно заставить работать кнопку типа <input type=submit>:
{{ form_start(delete_form) }}
<input type="submit">
{{ form_end(delete_form) }}

в виде созданным таким методом ?

public function showAction(Request $request)
{
$em = $this->getDoctrine()->getManager();

$session = $request->getSession();

$cart = $em->getRepository('AppShopBundle:Cart')->findBy(array('user_token' => $session->get('token')));

return $this->render('cart/index.html.twig', array(
'cart' => $cart,

));
}

Вот такая страницы получается. <input type="submit"> - красный крест

https://prnt.sc/g7j77n
 
Последнее редактирование:
Сверху