この問題の解決策を見つけるために多くの時間を費やしましたが、正しい解決策が見つかりません
複数のエンティティアドレスを含めることができるユーザーエンティティがあります。Userエンティティの検証は次のように機能する必要があります。
- ユーザーには少なくとも2つのエンティティが必要ですアドレス
- ユーザーは最大3つのエンティティを持っている必要がありますアドレス
- アドレスには独自の検証制約があります
両方のエンティティにはformTypeがあり、AddressはユーザーformTypeのCollectionTypeです。
現在、ユーザーコントローラーで、ビューに正しく表示される3つのアドレスを作成しています。エンティティのフォームを検証するために、「min=2」で「Assert\Count」を使用します。コントローラーで、クエリをフィルター処理して、完了していないアドレスを削除してから、フォームを検証します。このアプローチは正しくありません。フォームが無効な場合、3つのアドレスを表示できません。入力済みのアドレスしかありません。さらに、Twigでビューを作成したときにフィールドでエラーが発生することはありません
理想的なロジックは次のとおりです。アドレスが検証され、有効なアドレスのみがユーザーによって考慮されます。ユーザーは検証制約が尊重されていることを確認し、ユーザーエンティティがデータベースに保存されます。シンプルでしょ?(...まあそれは私が思ったことです)
私の問題をカバーするアイデアやブログ投稿はありますか?
編集(コメントの質問に答えるために)
ユーザーエンティティ内
<?php
//...
* @Assert\Count(
* min=2,
* minMessage="user_form_not_enough_addresses",
* max=3,
* maxMessage="user_form_too_much_addresses"
* )
*/
private $addresses;
//...
ユーザーコントローラー内(リクエストをフィルター処理する場合)
//...
// Removing not completed addresses from request
$this->_filterRequest($request);
$userType = new UserType();
$user = new User();
$userForm = $request->get($userType->getName());
foreach ($userForm['addresses'] as $address) {
$user->getAddresses()->add(new Address());
}
$form = $this->createForm($userType, $user);
$form->bind($request);