CakePHP: отображение сообщения об ошибке / успехе в форме входа в Ajax - PullRequest
1 голос
/ 02 сентября 2011

Я использую компонент Auth.У меня есть Ajax форма входа в систему, и я хочу показать сообщение об успехе / неудаче в форме без обновления страницы.

Но когда я отправляю форму (используя jquery.form.js):

$('#loginform').ajaxForm(function(data) {
    alert(data);
});

возвращает home.ctp содержимое оповещения в случае успеха и возвращает HTML-коды формы входа в случае сбоя!

Я хочу получить $this->Auth->loginError в alert(data).

Вот некоторые настройки app_controller beforeFilter:

function beforeFilter(){
   $this->Auth->loginRedirect = false;
   $this->Auth->logoutRedirect = false;
   $this->Auth->loginError = __('Invalid e-mail or password.', true);
   $this->Auth->autoRedirect = false;
   $this->autoRender = false;
   $this->render('login','ajax');
}

Я использовал loginRedirect для рендеринга некоторых логик и создания объекта JSON для процесса jQuery.

1 Ответ

3 голосов
/ 02 сентября 2011

Вы можете использовать решение из блога Проверка формы 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"
        }
    }
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...