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

Проверенные VDS на SSD в Европе и России

Тема в разделе "Symfony", создана пользователем golfstream, 9 авг 2017.

  1. golfstream

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
    Всем доброго времени суток.
    Только начинаю разрабатывать в 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()) {....

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

    флоппик promotor fidei Команда форума Партнер клуба

    Сообщения:
    4.719
    Ваш город:
    Павлодар, Казахстан
    Adress:
    Pavlodar, Kazakhstan
    Country:
    Location on Map:
    действия над разными сущностями = разные формы
     
  3. golfstream

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
    Тоесть для этого нужно создавать отдельные action и отдельную кнопку формы, я правильно вас понял?
     
  4. golfstream

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
    Все равно не понятно.. Есть контроллер Product, и что, туда надо вписывать разные методы для кнопки "в корзину" для каждой формы?
     
  5. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    5.680
    Ваш город:
    Berlin
    Adress:
    Berlin, Germany
    Country:
    Location on Map:
    а спрашивать "уверенны ли вы" будешь?
     
  6. antson

    antson на форуме с 2005 года Партнер клуба

    Сообщения:
    1.114
    Ваш город:
    Россия, Липецк
    Adress:
    Lipetsk, Russia
    Country:
    Location on Map:
    @golfstream, ты стоишь на голове . перевернись. Не у товара "положить в корзину"
    А Контролер "Корзина"
    Методы
    добавить
    показать
    очистить
    удалить
    новое кол-во товара / увеличить / уменьшить

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

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
    @antson, спасибо большое за ответ. А ajax post, чтобы динамически менялась информация о корзине например?

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

    antson на форуме с 2005 года Партнер клуба

    Сообщения:
    1.114
    Ваш город:
    Россия, Липецк
    Adress:
    Lipetsk, Russia
    Country:
    Location on Map:
    1. csrf защита.
    2. поисковики меньше будут ходить.
    в роботс запретишь /basket/

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

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

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

    WMix герр M:)ller Партнер клуба

    Сообщения:
    5.680
    Ваш город:
    Berlin
    Adress:
    Berlin, Germany
    Country:
    Location on Map:
  10. golfstream

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
  11. golfstream

    golfstream Новичок

    Сообщения:
    9
    Ваш город:
    Москва, Россия
    Adress:
    Moscow, Russia
    Country:
    Location on Map:
    А как можно заставить работать кнопку типа <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
     
    Последнее редактирование: 12 авг 2017