1
我嘗試實現保存在會話中的表單值。Symfony 2 Forms:將視圖數據存儲在數組中並在稍後恢復條件
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等等複製一些代碼。
有沒有更好的方法?