首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符号学:与在会话中保存的实体形成水合物(教义代理)

符号学:与在会话中保存的实体形成水合物(教义代理)
EN

Stack Overflow用户
提问于 2015-01-03 10:30:56
回答 1查看 980关注 0票数 1

我正在使用symfony2和doctrine2。我有一个函数可以进行大量的计算。第一个屏幕显示结果,第二个屏幕显示修改结果的表单。为了不重新计算和请求数据库,我在会话变量中保存第一个结果,将它们传递给下一个屏幕,并在那里检索它们。现在,我想使用从会话中检索到的元素为表单添加水合物,并得到以下错误:

代码语言:javascript
复制
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?

因为从会话中检索的实体不是实际实体,而是代理(object(Proxies__CG__\AppBundle\Entity\MarketPlace\Product)512)。

我不能从保存在会话中的数据中提取表单吗?我该如何解决我的问题?

我有以下控制器代码:

代码语言:javascript
复制
/**
 * @Route("/planning_order", name="planning_order")
 * @Method({"GET", "POST"})
 * @Template(":MarketPlace/Order:planning_order.html.twig")
 * @param Request $request
 * @return array
 */
public function planningOrderAction(Request $request)
{
    $formManager = $this->get('form_manager');
    $orderManager = $this->get('order_manager');
    $order = new Order();

    $products = $this->get('session')->get('products');

    if (!$products)
    {
        $formManager->addError("Aucun planning de production n'a été trouvé. Veuillez en sélectionner pour générer des commandes.");
        return $this->redirect($this->generateUrl('display_plannings', array('includeAssociates' => true)));
    }

    $placePlanningOrderForm = $orderManager->getPlacePlanningOrderForm($products, $order);

    return array('place_planning_order_form' => $placePlanningOrderForm->createView());
}

我的表单是这样生成的:

代码语言:javascript
复制
/**
 * @param array $products
 * @param Order $order
 * @return \Symfony\Component\Form\Form|\Symfony\Component\Form\FormInterface
 */
public function getPlacePlanningOrderForm(Array $products, Order $order)
{

    foreach ($products as $productData)
    {
        /** @var $product Product */
        $product = $productData['product'];
        $orderDetail = new OrderDetail();
        $orderDetail->setProduct($product);
        $order->addOrderDetail($orderDetail);
    }

    $placePlanningOrderForm = $this->formManager->createForm(
        new PlacePlanningOrderType(),
        $order,
        'POST',
        'planning_order'
    );

    return $placePlanningOrderForm;
}

我的表格如下:

代码语言:javascript
复制
    $builder
        ->add('product', 'genemu_jqueryselect2_entity', array(
                'label' => 'Produit',
                'class' => 'AppBundle:MarketPlace\Product'
            ))
        ->add('quantity', 'text', array('label' => 'Quantité à commander'))
    ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-03 12:08:29

这意味着UnitOfWork对您从会话中获得的实体一无所知。要使实体处于MANAGED状态,您应该持久化、刷新或找到它(因此Doctrine将开始监视该实体)。因此,我建议您在会话中保存的不是对象,而是ID,然后使用id IN(array of IDs from session)查找所有产品。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27753874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档