2015-04-23 2 views
1

Когда я показываю выбранные продукты, сохраненные в сеансах, у меня есть кнопка, с которой я хочу удалить конкретный продукт, если мне это не нужно. Могу ли я достичь этого с помощью javascript? Если нет, то какие другие решения этой проблемы?Symfony2 можно ли удалить переменную сеанса с помощью Javascript?

Я слышал, что вы не можете установить переменные сеанса с помощью javascript, так что, вероятно, то же самое происходит с их удалением, но я слышал, что вы можете что-то сделать с ajax, чтобы удалить их? В любом случае им отображая свои продукты, как это (сейчас им только показывает цену продукта динамически):

{% for item in items %} 
    <tr> 
     <td><img width="60" src="{{ asset('bundles/mpFrontend/assets/products/4.jpg') }}" alt=""/></td> 

     <td>{{ item.model }}</td> 
     <td> 
      <div class="input-append"><input class="span1" style="max-width:34px" placeholder="1" id="appendedInputButtons" size="16" type="text"> 
       <button class="btn" type="button"><i class="icon-minus"></i></button> 
       <button class="btn" type="button"><i class="icon-plus"></i></button> 
       <button class="btn btn-danger" type="button" onclick="removeItem(item.id)"><i class="icon-remove icon-white"></i></button> 
      </div> 
     </td> 
     <td>$120.00</td> 
     <td>$25.00</td> 
     <td>$15.00</td> 
     <td>$110.00</td> 
    </tr> 
{% endfor %} 

UPDATE Это то, что я сделал уже:

RemoveAction в контроллере:

маршрутизации
public function removeAction($itemId) 
{ 
    $session = $this->getRequest()->getSession(); 
    $session->remove(); 
    return $this->render('MpShopBundle:Frontend:product_summary.html.twig');  
} 

контроллер:

removeItem: 
    pattern: /remove 
    defaults: { _controller: MpShopBundle:Homepage:remove } 

Сценарий:

<script> 

    $(".btn btn-danger").click(function(){ 
     var itemId = $(this).val(); 
     $.ajax({ 
      type: "POST", 
      url: "{{ path('removeItem') }}", 
      data: { itemId: itemId } 
     }); 

</script> 

Нажатие на кнопку не делает ничего, и им не удивляйтесь, так как это мой первый раз действительно с помощью JavaScript я думаю, что я сделал что-то не так?

ответ

2

Да, вы можете с ajax!

  1. Создайте свое действие в контроллере, который удаляет данный продукт вашей сессии.

Пример кода:

ProductController extends Controller{ 
    ... 

    public function removeItemAction($itemId){ 

     //find here your session where you save the item. 

     //and remove it 

     //return a response depending on what you want in the format that you want (json,xml,...) 
     return new Response("..."); 
    } 
} 

2.Create ваш Javascript код, который слушать действие и отправить запрос Аякса прецедентной URL. (если вы используете jQuery, см. $ .ajax)

  1. обновите свой DOM (удалив нужные элементы или загрузите любой html, который вы хотите).
+0

Поскольку я довольно новичок в программировании, вы можете объяснить первую часть более кратко? – Dominykas55

+0

Это более ясно? – MouradK

+0

Хорошо. Переменная $ itemId должна быть указана в функции javascript, затем я удаляю сеанс на основе идентификатора. Часть ответа мне непонятна. Это то же самое, что и рендер? – Dominykas55

0

Использование ТОЛЬКО Javascript, вы не можете. Ваш PHP-сеанс доступен только через php. Единственное, что вы можете сделать, это создать функцию в php, которая удалит все, что вы хотите из сеанса, и вызовите ее из javascript, используя вызовы ajax, например @MouradK.

Смежные вопросы