Il suffit de faire très simple PRG Pattern droit de ..Il ?! Eh bien, au moins c'est ce que tout le monde dit mais personne ne publie de réponse claire! Il m'a fallu une semaine de recherche et de creusage, puis le "Newbie" a décidé de faire quelque chose par lui-même! Voici une façon de le faire dans CakePHP (j'utilise 2.0.5):
Quelle que soit le code est ici la logique dans les étapes: 1-
données définies
2- validate (ne pas créer() encore)
3- écrire $ this-> request-> données à une variable de session
4- redirigent à une action SAVEDATA
intérieur une action SAVEDATA:
5- lire & enregistrer la variable session de SUPPRIMER
6 de la session de variable
7- create()
8 enregistrer des données pour modéliser
9- redirigent
Voici un exemple de la façon dont votre code pourrait ressembler.
** Attn: "ourController" et "ourModel"
public function add() {
if ($this->request->is('post')) {
if (isset($this->request->data)) {
$this->ourModel->set($this->request->data);
if ($this->ourModel->validates()) {
$this->Session->write('myData', $this->request->data);
$this->redirect(array('controller' => 'ourController',
'action' => 'saveData',
'ourModel' //optional but recommended
)
);
} else {
$this->Session->setFlash('ourModel could not be saved.');
}
}
.....//the rest of add() function
}
alors vous devriez être redirigé (sur la validation) à cette fonction qui vous redirige à nouveau à l'action d'index ou chaque fois que votre logique vous prend!
public function saveData($model) {
$myData = $this->Session->read('myData');
$this->Session->delete('myData'); //extremely important
$this->$model->create();
if ($this->$model->save($myData))
// or $myData[$model] if you are dealing with multiple models
{
$this->Session->setFlash(__($model.' have been saved successfully'));
$this->redirect(array('controller' => 'ourController',
'action' => 'index'
)
);
}
} else{
$this->Session->setFlash(__($model.' could not be saved'));
}
}
}
Une auto-simple redirection pourrait fonctionner mais dans la plupart des cas, vous souhaitez rediriger vers un point de vue différent (par exemple, à une autre forme ou à la vue index)
J'espère que cette élaboration permet de gagner du temps sur les autres si ne pas avoir à perdre une semaine entière (comme dans mon cas) juste pour faire une telle fonctionnalité côté serveur!
Pas particulièrement utile - gâteau est généralement d'avoir la configuration des formulaires de retour après eux-mêmes. Il vaut mieux continuer aussi, car vous obtenez beaucoup de choses (comme remplir automatiquement les champs d'une erreur de validation) avec ça. –