首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >原则2/多步骤形式/实体进入会议

原则2/多步骤形式/实体进入会议
EN

Stack Overflow用户
提问于 2012-06-13 09:21:46
回答 1查看 2.6K关注 0票数 2

我是在Symfony2和Doctrine2.1.6下工作的,我试图建立一个多步骤的表单.在每个表单页之间,我尝试将理论实体发送到$_SESSION中。

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

但是根据其他很多关于堆栈溢出的帖子,不可能将实体发送到会话中。

我有下面的控制器操作,在这里我几乎复制/超过了理论文档。

代码语言:javascript
代码运行次数:0
运行
复制
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行;给出以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
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助手替换这一行

代码语言:javascript
代码运行次数:0
运行
复制
$session->set('propertyAdd', $property);

它引发以下异常:

代码语言:javascript
代码运行次数:0
运行
复制
Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::serialize() must return a string or NULL

这个理论的例子是可行的。

EN

回答 1

Stack Overflow用户

发布于 2012-06-13 09:49:40

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

在会话中创建一个entity

  • Serialize it

  • (我个人不认为将一个对象转换为字符串是件好事)

  • 在表单的下一个step

  • Deserialize中从会话中获取它-- it

  • 向它添加新的数据,

H 113序列化它H 214H 115将它再次放入会话<>H 216F 217

等等..。

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

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

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

https://stackoverflow.com/questions/11011834

复制
相关文章

相似问题

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