我尝试在会话中实现表单值保存。
1)点击按钮“更改类别”上page1
2)在会话中存储数据
3)重定向到page2
4) 使用此保存的表单数据执行一些更改并在会话中更新它
5)通过存储在会话中的值重定向回page1
并恢复表单值
$product = new Product;
$productType = new ProductType;
$form = $this->createForm($productType, $product);
//get values from session
$form_values_in_session = ...
if ($request->isMethod('POST')) {
$form->bind($request);
// if click on change category button
if ($request->request->get('category')) {
$form_raw_values = $request->get($productType->getName());
$form_values = array();
foreach ($form_raw_values as $form_field_name => $form_field_value) {
if ($form->has($form_field_name)) {
$form_values[$form_field_name] = $form_field_value;
}
}
// store this data in session
// and redirect
return $this->redirect($this->generateUrl();
}
if ($form->isValid()) {
// form submit
}
} else if ($form_values_in_session) {
$form->bind($form_values_in_session);
}
工作得很好,但问题是表单在通话后正在验证$form->bind($form_values_in_session);
,我在页面上看到表单错误。
正确的方法是:调用 setter $product
,但在这种情况下,我需要手动转换视图数据 -> 规范数据 -> 模型数据。类中的此类方法Form
是私有的,我需要从 Form::viewToNorm、Form::normToModel 等方法中复制粘贴一些代码。
有没有更好的办法?