我正在尝试实现多格式多页面功能。例如,我有一个实验(实体),它与经典的外键关系链接到数据(实体)和结果(实体)。我想创建一个输入过程,如:
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
检查变量:没有空变量... newAction
“发送”到方法newDataAction
。感谢您的帮助,
答案 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'})