【问题标题】:Symfony2 is it possible to remove session variable with Javascript?Symfony2 是否可以使用 Javascript 删除会话变量?
【发布时间】:2015-04-23 08:45:02
【问题描述】:

当我显示保存在会话中的选定产品时,我有一个按钮,如果我不需要它,我想使用它删除特定产品。我可以用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 %}

更新这是我已经做的:

控制器中的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,我想我做错了什么?

【问题讨论】:

    标签: javascript php symfony session


    【解决方案1】:

    是的,你可以使用 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.创建您的 javascript 代码来侦听操作并将请求 ajax 发送到先前的 url。 (如果您使用 jQuery ,请参阅 $.ajax )

    1. 更新您的 DOM(删除正确的元素或加载您想要的任何 html)。

    【讨论】:

    • 由于我对编程还很陌生,你能更简单地解释一下第一部分吗?
    • 好的。变量 $itemId 必须在 javascript 函数中指定,然后我根据 id 删除会话。我不清楚响应部分。和render一样吗?
    • 响应 = 渲染。这取决于你需要什么,它可以是你将看到的“html”,或者只是一个“布尔值”来告诉你的脚本是否真的完成了(并在 javascript 中删除你的项目)
    • 这就是主意,我有什么可以帮助你的吗? (除了你应该删除你的会话项目,而不是你的所有会话)。并且您应该删除 $itemId 的 methodAction (并从 Request 对象中获取)
    【解决方案2】:

    仅使用 Javascript,您不能。 您的 PHP 会话只能通过 php 访问。您唯一能做的就是在 php 中创建一个函数,从会话中删除您想要的任何内容,并使用 @MouradK 所说的 ajax 调用从 javascript 中调用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2023-04-05
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多