Date de publication : Jul 24, 2012 4:11:58 PM
Attention : quand on utilise $this->MonModel->read(null, $id), les données de $this->request->data et les erreurs associés précédentes, sont supprimées et remplacées par celle à la suite de read.
Si l'on a fait une tentative de save précédente, et que la validation a échoué, les messages d'erreurs sont perdus!
Il faut donc préférer la méthode find, qui ne fait pas bouger les données du formulaire ni les erreurs.
$this->findById($id);
Ex dans méthode edit de RapprochableController.php :
if ($this->Rapprochable->save($this->request->data)) {
$this->Session->setFlash(__('La structure a été modifiée'));
$this->redirect(array('action' => $typeListe));
} else {
$this->Session->setFlash(__('La structure ne peut pas être sauvée. Essayez-encore, svp.'));
$dataPrec = $this->request->data; // on mémorise les données saisies par l'utilisateur
$this->request->data = $this->Rapprochable->findById($id); // on récupère les données de la base (écrase les erreurs précédentes!!)
// on écrase avec les données saisies par l'utilisateur
$this->request->data['Rapprochable']['code_sages'] = $dataPrec['Rapprochable']['code_sages'];
$this->request->data['Rapprochable']['date_unification'] = $dataPrec['Rapprochable']['date_unification'];
$this->request->data['typeListe'] = $typeListe;
}
Avec read, il aurait fallu faire (pour le fun, à ne pas faire) :
if ($this->Rapprochable->save($this->request->data)) {
$this->Session->setFlash(__('La structure a été modifiée'));
$this->redirect(array('action' => $typeListe));
} else {
$this->Session->setFlash(__('La structure ne peut pas être sauvée. Essayez-encore, svp.'));
$dataPrec = $this->request->data; // on mémorise les données saisies par l'utilisateur
$errPrec = $this->Rapprochable->validationErrors; // on mémorise les erreurs du formulaire
$this->request->data = $this->Rapprochable->read(null, $id); // on récupère les données de la base (écrase les erreurs précédentes!!)
// on écrase avec les données saisies par l'utilisateur
$this->request->data['Rapprochable']['code_sages'] = $dataPrec['Rapprochable']['code_sages'];
$this->request->data['Rapprochable']['date_unification'] = $dataPrec['Rapprochable']['date_unification'];
$this->request->data['typeListe'] = $typeListe;
$this->Rapprochable->validationErrors = $errPrec; // on recopie les erreurs précédentes pour informer la vue
}