シリアル化を使用しようとしましたが、エンティティは「多くの」関連付けで非常に複雑です。したがって、シリアル化は遅すぎます。切り離した後も。
最初の解決策(簡略化):
最初のステップ/アクション内のセッションに POST 変数を保存します。
$postParams = $this->getRequest()->request;
$session = $this->getRequest()->getSession();
if (!$session) {
$session = new Session();
}
$session->set($sessionKey, $postParams);
2 番目のステップ/アクションでは、フォームを使用してエンティティを再作成しました。
$cancellation = $manager->initCancellationSomehow();
$session = $this->getRequest()->getSession();
if (!$session) {
$session = new Session();
}
$parameterBag = $session->get($sessionKey);
$cancellation = $this->getCancellation($customerId);
$form = $this->createForm(
new CancellationType(),
$cancellation,
array(
'em' => $this->getDoctrine()->getManager())
);
$form->bind($parameterBag->get('form'));
[..]
2番目の解決策:
私の最初の考えは、キャンセルをデータベースに保存することでした。したがって、状態属性 ( active
/ temp
/ ..
) を追加しました。未確認のキャンセルは としてマークされtemp
ます。ユーザーが状態が から に変更されたことを確認したtemp
場合active
。一時コレクションは、低い優先度で実行されるガーバージ コレクターによって 1 時間後に削除されます。
ユーザーは、既にデータベースに保存されている最終的なキャンセルを確認する必要があるため、2 番目のソリューションが気に入っています。フロントエンドが期待どおりに動作しない場合、ユーザーはキャンセルが破損していることに気付くでしょう (たとえば、間違ったエントリが選択されたなど)。彼が確認した場合、状態のみが変更されます。安全だと感じます。最初のソリューションでは、ユーザーは何をデータベースに保存する必要があるかを確認しますが、今まで確認していません。不安を感じます。