我正在使用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 %}
答案 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
}
我可以看到你有许多非常基本的问题 - 确切地说你需要大量的学习和学习编程。
顺便说一下。我想我帮助你解决了主题中的问题描述 - 所以你应该将我的评论标记为有用且主题已经解决。