2016-02-05 94 views
0

我正在使用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 %} 

回答

1

也許我錯了,但我想這條線是問題:

$cart[] = $id; 

您在這裏初始化新的陣列,每時間。如果我很好,你可以從session得到這個數組。

嘗試

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

+0

btw是什麼原因在這裏添加'$ id'到數組'$ cart [] = $ id;'? 這條線 '$ cart [$ entity-> getId()] = $ entity-> getName();' 應該就夠了。 – LuckyLue

+0

這只是爲了演示分配給哪個id,以及我將在哪裏放置代碼片段? –

+0

嘗試替換'$ cart [] = $ id;'=>'$ cart = $ this-> get('session') - > get('cart',[]);' – LuckyLue

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 
} 

我可以看到你許多非常基本的問題 - definatelly你需要大量的學習和學習編程。

Btw。我想我幫你解決了描述主題的問題 - 所以你應該把我的評論標記爲有幫助和主題。