Вы можете использовать решение из блога Проверка формы CakePHP с помощью Ajax с использованием jQuery .
По сути, дело в том, чтобы отличить стандарт от Ajax запроса с помощью:
if ($this->RequestHandler->isAjax()) { /*If it is an Ajax call*/ }
else { /* If it is a standard action request */ }
и все еще нужно повернуть уровень отладки до 0 (Configure::write('debug',0)
) и использовать Ajax layout , чтобы не выводить данные в стандартном XHTML макете in /app/views/layouts/default.ctp
.
Отладка отправленной формы выглядит следующим образом:
Configure::write('debug', 0);
$this->layout = 'ajax';
if ($this->RequestHandler->isAjax()) {
if (!empty($this->data)) {
$this->Post->create();
$this->Post->set($this->data['Post']);
if($this->Post->validates()) {
if ($this->Post->save($this->data)) {
$message = __('The Post has been saved.', true);
$data = $this->data;
$this->set('success', compact('message', 'data'));
}
} else {
$message = __('The Post could not be saved. Please, try again.', true);
$Post = $this->Post->invalidFields();
$data = compact('Post');
$this->set('errors', compact('message', 'data'));
}
}
}
И вывод после того, как это сделано в формате JSON:
// Error output
{"errors":{
"message":"The Post could not be saved. Please, try again.",
"data":{
"Post":{
"title":"This field cannot be left blank.",
"body":"This field cannot be left blank."
}
}
}}
// Success output
{"success":{
"message":"The Post has been saved.",
"data":{
"Post":{
"id":"",
"title":"Lorem ipsum dolor sit amet",
"body":"Lorem ipsum dolor sit amet, aliquet ...",
"published":"1"
}
}
}}