Symfony - 以多页形式传递对象

时间:2016-01-14 13:37:22

标签: php forms symfony doctrine-orm

我正在尝试实现多格式多页面功能。例如,我有一个实验(实体),它与经典的外键关系链接到数据(实体)和结果(实体)。我想创建一个输入过程,如:

Experimentation entry (using Experimentation generated form)
Next
Data entry (using Data generated form)
Next
Result entry (using Result generated form)
Validate

这三个实体仅在最后一步(验证)持久化(并刷新)。

我尝试过以下代码:

/**
 * Creates a new Experimentation entity.
 *
 * @Route("/new", name="experimentation_new")
 * @Method({"GET", "POST"})
 */
public function newAction(Request $request) {

    $experimentation = new Experimentation();
    $form = $this->createForm('AppBundle\Form\ExperimentationType', $experimentation);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $this->experimentation = $experimentation;
        return $this->forward('AppBundle:Experimentation:newData', array(
            'experimentation' => $experimentation
        ));
    }

    return $this->render('experimentation/new.html.twig', array(
            'experimentation' => $experimentation,
            'form' => $form->createView(),
    ));
}

在同一个控制器中:

/**
 * Creates a new Data for the new Experimentation entity.
 *
 * @Route("/new/data", name="experimentation_new_data")
 * @Method({"GET", "POST"})
 */
public function newDataAction(Request $request, $experimentation = null) {
    $data = new Data();
    $form = $this->createForm('AppBundle\Form\DataType', $data);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // Go to the "Result" entry using the same technique
        return $this->forward('...');
    }

    return $this->render('data/new.html.twig', array(
            'data' => $data,
            'experimentation' => $experimentation,
            'form' => $form->createView(),
    ));
}

看起来symfony无法呈现第二种形式(基于数据实体的数据形式):

  

合并过滤器仅适用于数组或“Traversable”,得到“NULL”   作为第1行的data / new.html.twig中的第一个参数。

我试图做的事情:

  • 使用var_dump检查变量:没有空变量...
  • 通过redirectToRoute替换前转:在这种情况下,表单已呈现,但我无法将实验对象从方法newAction“发送”到方法newDataAction

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

我最近遇到过这个问题,并且正如错误消息msg所暗示的那样,它是'merge' twig过滤器。

您的new.html.twig模板可能会扩展另一个模板 - 请检查该基本模板,以便使用'合并' (第1行和第34行的错误消息" data / new.html.twig;赠品,第1行将是您的'扩展'声明)。

在我的情况下,我正在执行以下操作,但app.request.get(' _route_params')在某些条件下为空:

app.request.get('_route_params')|merge({'_locale': 'en'})