Если вы используете Cake, вы действительно должны изучать и использовать Cake.
Просто быстрое сокращение потока в Cake:
Form page -> Submit
^ |
| v
| Controller // Form data is in $this->data
| |
| v
| $this->Model->save($this->data); -> Model
| |
| v
-------- Controller <----------------------- Data validation
validation no good |
| validation okay
v
Controller <----------------------- Actually save data
|
v
Go somewhere else
Что это значит для вас:
$this->data
является центральным для правильной работы форм. НЕ ПРИКАСАЙТЕСЬ к $ _POST! Используйте методы Cake для создания форм и используйте те же имена для полей, что и в базе данных. Это облегчает торт "автоматики". Вы не собираете вручную массив для передачи в базу данных, вы используете одни и те же имена для всего от начала до конца и просто передаете массив. $this->data
будет автоматически возвращаться из контроллера в представление (т. Е. В форму), если вы используете Cake FormHelper поля будут автоматически заполняться из него.
Вы должны свести к минимуму работу, которую вы должны сделать между отправкой формы и сохранением данных. В идеале ваш контроллер выглядит только так:
if (!empty($this->data)) {
if ($this->Model->save($this->data)) {
$this->redirect(array('action' => 'next_step'));
}
}
Это весь код, который вам нужен, и он будет
- отобразить страницу
- обрабатывать отправку форм
- подтвердить ввод
- заполнить поля формы обратно, если проверка не удалась
- сохранить данные, если проверка прошла успешно
- перенаправить на следующий шаг, если данные были успешно сохранены
Если поля формы не соответствуют полям базы данных 1: 1, измените только те биты, которые вам нужны, от if(!empty($this->data))
до $this->Model->save($this->data)
:
if (!empty($this->data)) {
$this->data['Model']['mobile_number'] = implode('-', $this->data['Model']['mobile_number']);
if ($this->Model->save($this->data)) {
$this->redirect(array('action' => 'next_step'));
}
}
Если вы хотите проверить отправленные данные формы для полноты, вы только заполняете соответствующие правила в Модели . Каждый раз, когда вы выдаете $this->Model->save()
, модель автоматически проверяет правила перед сохранением и return false
, если они не выполняются.