Просто сделайте PRG Pattern .. Это очень просто, верно ?! Ну, по крайней мере, так говорят все, но никто не дает четкого ответа! У меня ушла неделя поиска и копания, а потом «Новичок» решил что-то сделать самостоятельно! Вот один из способов сделать это в cakephp (я использую 2.0.5):
Независимо от кода здесь логика в шагах:
1- набор данных
2- подтвердить (НЕ создавать () еще)
3- записать $ this-> request-> data в переменную сеанса
4 - перенаправить на действие saveData
Внутри действия saveData:
5 - прочитать и сохранить переменную сеанса
6- УДАЛИТЬ переменную сеанса
7- создать ()
8- сохранить данные в модель
9- перенаправление
Вот пример того, как может выглядеть ваш код.
** Внимание: " ourController " и " 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
}
Тогда вы должны быть перенаправлены (при проверке) на эту функцию, которая перенаправляет вас снова на индексирование или на то, куда вас ведет логика!
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'));
}
}
}
Может сработать простое перенаправление, но в большинстве случаев вы хотите перенаправить в другое представление (например, в другую форму или в индексное представление)
Я надеюсь, что эта разработка поможет сэкономить время другим, чтобы не тратить целую неделю (как в моем случае) только на выполнение такой функциональности на стороне сервера!