Я пытаюсь получить ошибки проверки с помощью Ajax и jQuery, работающих в CakePHP 2.1 для контактной формы. При размытии поля имени вызывается функция js:
$(document).ready(function(){ $('#name').blur(function(){ $.post( '/Cake_ajax/Contacts/validate_form', { field: $(this).attr('id'), value: $(this).val() }, handleNameValidation ); }); function handleNameValidation(error){ if(error.length > 0){ if($('#name-notEmpty').length == 0){ $('#name').after($('<div id="name-notEmpty" class="error-message">' + error + '</div>')); } }else{ $('#name-notEmpty').remove(); } } });
Javascript вызывает функцию validate_form в моем контроллере:
public function validate_form(){ if($this->RequestHandler->isAjax()){ $this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value']; $this->Contact->set($this->request->data); if($this->Contact->validates()){ $this->autorender = FALSE; // don't render a view }else{ $error = $this->validateErrors($this->Contact); $this->set('error', $error[$this->request->params['form']['field']]); } } }
На мой взгляд, я получаю пару ошибок при вызове ошибки:
Undefined index: form [APP\Controller\ContactsController.php Undefined index: form [APP\Controller\ContactsController.php
Я нахожусь на своем пути, и я довольно новичок в CakePHP. Любая помощь будет принята с благодарностью.
В вашем контроллере у вас должно быть что-то вроде ниже. Cake 2.0 заменяет многие функции в RequestHandlerComponent и Controller. Он также заменяет массив $ this-> params во всех местах и старые данные $ this-> data на $ this-> request->, что-то вроде этого. Вы можете посетить руководство по миграции .
public function validate_form(){ if($this->RequestHandler->isAjax()){ $this->request->data['Contact'][$this->request['form']['field']] = $this->request['form']['value']; $this->Contact->set($this->request->data); if($this->Contact->validates()){ $this->autorender = FALSE; // don't render a view }else{ $error = $this->validateErrors($this->Contact); // didn't validate logic $this->set('error',$this->Contact->validationErrors[$this->request['data']['field']][0]); } } }
Попробуйте $this->request->params['field']
вместо $this->request->params['form']['field']
.
Или сразу после проверки на isAjax()
попробуйте выполнить var_dump в параметрах $this->request->params
. Из полученной вами ошибки индекс формы не существует в параметрах $this->request->params
.
Если вы хотите имитировать POST, как это делается при использовании стандартной формы и Cake FormHelper, вы также можете просто назвать опубликованные параметры так же, как FormHelper называет поля ввода.
$j.post( '/Cake_ajax/Contacts/validate_form', { "data[Contact][" + $(this).attr('id') + "]": $(this).val() }, handleNameValidation );
Это автоматически заполнило бы $this->request->data['Contact']['name']
и вы могли бы просто прокомментировать эту строку:
//$this->request->data['Contact'][$this->request->params['form']['field']] = $this->request->params['form']['value'];