如何阻止数组被覆盖?

时间:2016-02-05 18:26:04

标签: php arrays symfony

我正在使用Symfony2,版本2.7。但任何人都应该能够回答这个问题,因为它与symfony并不完全相关。

我有一个功能。我希望该函数将一个新项(一旦从表单中单击)添加到一个数组。相反,我的数组不断被所单击的新项目覆盖。

我尝试了一些foreach循环,但无法正确使用它。请,任何帮助表示赞赏。

以下是相关功能。

  /**
     * Displays Bought Items
     *
     * @Route("/buy/{id}", name="item_buy")
     * @Method("GET")
     * @Template()
     */
    public function buyAction(Request $request, $id)
    {
        $session = $request->getSession();

        $cart[] = $id;

        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('AppBundle:Item')->find($id);

        $entities = $em->getRepository('AppBundle:Item')->findAll();

            $session->set('cart', $cart);

            if (!$entity) {
                throw $this->createNotFoundException('No Item ');
            } else {
                $cart[$entity->getId()] = $entity->getName();
            }
       $session->set('cart', $cart);

    return array(
        'cart'     => $cart,
        'entity'   => $entity,
        'entities' => $entities,
    );
}

如何在树枝上使用它:

{% extends '::base.html.twig' %}

{% block body -%}
    <h1>Items Bought...</h1>

    <table class="record_properties">
        <h3>You Bought...</h3>
        {# {% if entity is defined %} #}
            {% for key, cartValue in cart %}
                <tr>
                    <td>{{ key }}: {{ cartValue }}</td>
                    {{ dump(entity.name) }}
                    {{ dump(cart) }}
                </tr>
            {% endfor %}
        {# {% endif %} #}


        <tbody>
        {% for entity in entities %}
            <tr>
                <td><a href="{{ path('item_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
                <td>{{ entity.name }}</td>
                <td>
                <ul>
                    <li>
                        <a href="{{ path('item_buy', { 'id': entity.id }) }}">Buy</a>
                    </li>
                </ul>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>


     <ul class="record_actions">
    <li>
        <a href="{{ path('item') }}">
            Back to the list
        </a>
    </li>
{% endblock %}

2 个答案:

答案 0 :(得分:1)

也许我错了,但我想这一行很有问题:

$cart[] = $id;

每次都在这里初始化新数组。如果我是怀特,你可以从session得到这个数组。

尝试

$cart = $this->get('session')->get('cart', []);

答案 1 :(得分:0)

对于更好的代码格式,我在这里回答你的最后评论。

上面你正在撰写关于添加新元素的文章,我帮助你解决了这个问题。现在(如果我理解correclty)你在会话中保存的数组中添加了元素的问题。我很惊讶你的意外。如果您想要从会话中保存的数组中删除某些内容,则必须执行此操作。清理购物车并不困难你应该写下这样的东西:

public function clearCartAction(Request $request)
{
   $session->set('cart', array()); //set empty array

   //return something here.. 
}

从购物车中删除单个对象(非常简单的实现):

public function removeAction(Request $request, $id)
{
    $session = $request->getSession();

    $em = $this->getDoctrine()->getManager();

    $cart = $session->get('cart', array());

    if (isset($cart[$id]) {
        unset($cart[$id]);
    }

    $session->set('cart', $cart);

    //return something here
}

我可以看到你有许多非常基本的问题 - 确切地说你需要大量的学习和学习编程。

顺便说一下。我想我帮助你解决了主题中的问题描述 - 所以你应该将我的评论标记为有用且主题已经解决。