セッションに保存するフォーム値を実装しようとしています。
1) 「カテゴリの変更」ボタンをクリックします。page1
2) セッションにデータを保存する
3) にリダイレクトpage2
4) この保存されたフォーム データでいくつかの変更を実行し、セッションで更新します。
page1
5)セッションに保存された値によってフォームの値にリダイレクトして復元する
$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);
れ、ページにフォームエラーが表示されることです。
これを行う正しい方法: のセッターを呼び出します$product
が、この場合、ビュー データ -> ノルム データ -> モデル データを手動で変換する必要があります。クラス内のそのようなメソッドForm
はプライベートであり、メソッド Form::viewToNorm、Form::normToModel などからいくつかのコードをコピーペーストする必要があります。
より良い方法はありますか?