3 개의 레이어가있는 양식이 있습니다.양식을 제출하지 않고 엔티티가 저장되지 않고 저장됩니다.
내장 된 유효성 검사는 어떻게 든 3 가지 레벨 모두를 통해 트리거되지 않습니다. 따라서 세 번째 레벨에서 오류를 수동으로 확인해야합니다. 오류가 발견되면 오류가있는 엔티티가 지속되지 않습니다. 플러시는 항상 루프가 끝날 때 트리거됩니다. 불행히도 유지되지 않고도 일부 잘못된 엔터티가 데이터베이스에 저장됩니다. 내 컨트롤러는 다음과 같습니다.
$form = $this->createForm(new GameListType(), $betRound);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bind($request);
$betRound = $form->getData();
if ($form->isValid()) {
foreach ($betRound->getGames() as $game) {
if ($game->hasBet()) {
$bet = $game->getBet();
// Filter are used during select
// , but dont work for inserts
// should work in this current context!
$bet->setGame($game);
$bet->setBetRound($betRound);
$bet->setUser($user);
$validator = $this->container->get('validator');
$errors = $validator->validate($bet);
if (count($errors) == 0) {
print($bet. ' got persisted'); <-- never triggered
$em->persist($bet);
} else {
// Manual Error Handling
// (no cascade Validation to third level
foreach ($errors as $violation) {
$form->addError(new FormError(
$violation->getMessageTemplate(),
$violation->getMessageParameters(),
$violation->getMessagePluralization()
));
}
}
}
} // foreach ($betRound->getGames() as $game)
$em->flush();
if(!$form->hasErrors()){
return $this->redirect($this->generateUrl('betround_show',
array('id' => $betRound->getId())
));
}
}
지속 작업은 실행되지 않지만 유효하지 않은 $ bet 엔티티는 여전히 데이터베이스에 저장됩니다.
당신을 위해 그것을 할 수있는 LifeCycleArgs가 있습니까? – phpisuber01
내가 아는 바는 아니지만 지속 된 후에 내기 엔티티에 수정 사항을 추가 할 수있는 몇 가지 방법이 있지만 내기가 처음부터 지속되는 위치는 여전히 알 수 없습니다. – m0c