【问题标题】:Doctrine 2/ Multi-step form / entity into sessionDoctrine 2/多步表单/实体进入会话
【发布时间】:2012-06-13 09:21:46
【问题描述】:

我在 Symfony2 和 Doctrine 2.1.6 下工作,我尝试设置一个多步骤表单。 在每个表单页面之间,我尝试将教义实体发送到 $_SESSION。

根据该 dotrine 文档,可以甚至解决多页表单的方法: http://docs.doctrine-project.org/en/2.1/cookbook/entities-in-session.html

但根据 stackoverflow 上的许多其他帖子,不可能将实体发送到会话中。

我有以下控制器动作,我几乎复制/过去了学说文档。

public function indexAction(Request $request, $id)
{
    $session = $request->getSession();
    $em = $this->getDoctrine()->getEntityManager();


    if (isset($_SESSION['propertyAdd'])) {   
    $property = $_SESSION['propertyAdd'];
    $property = $em->merge($property);
    }

    else {

    $property = new property;

    }

    $form = $this->createForm(new propertyType($this->getDoctrine()),$property);

    // check form
    if ($request->getMethod() == 'POST') {
            $form->bindRequest($request);
            if ($form->isValid()){

            $em->detach($property);
            $_SESSION['propertyAdd'] = $property;

            // redirection to next step here  

            }
            }
   return $this->render('AddProperty:'.$id.'.html.twig', array(
        'form' => $form->createView(),));

}

行 $_SESSION['propertyAdd'] = $property;给我以下错误:

Fatal error: Uncaught exception 'ErrorException' with message 'Notice: Unknown: "id" returned as member variable from __sleep() but does not exist in Unknown line 0' in G:..\Symfony\vendor\symfony\src\Symfony\Component\HttpKernel\Debug\ErrorHandler.php on line 65

如果我使用 Symfony2 助手替换这一行

$session->set('propertyAdd', $property);

它会抛出以下异常:

Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::serialize() must return a string or NULL

教义示例是否可行。

【问题讨论】:

    标签: session symfony doctrine-orm


    【解决方案1】:

    这并不能回答你的问题,但你为什么要:

    • 创建实体
    • 序列化
    • 放在会话中(我个人不认为将对象转换为字符串是一件好事)
    • 在表单的下一步中从会话中获取它
    • 反序列化
    • 向其中添加新数据
    • 序列化
    • 再次放入会话中

    等等……

    为什么不将表单数据直接存储在会话中,并在表单的所有步骤完成后创建实体?

    如果您这样做是为了验证实体,您可以简单地使用表单(未链接到实体)并向它们添加验证约束。

    【讨论】:

    • 您好,感谢您的帮助。我也不能序列化。序列化实体会给我同样的异常。无论如何,我想我会按照您的建议将每个字段放入会话中。再次感谢!
    猜你喜欢
    • 2014-01-29
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多