2015-04-09 2 views
2

Я пытался проверить свою регистрационную форму YII2, но она не работает. Ввиду:Yii2 проверка ajax не работает

$form = ActiveForm::begin([ 
    'id'     => 'register', 
    'options'    => ['accept-charset'=>'utf-8'], 
    'validateOnChange'  => false, 
    'enableAjaxValidation' => true, 
    'validateOnSubmit'  => true, 
]) 

В контроллере:

$model = new MUser(); 

if($model->load(Yii::$app->request->post()) && Yii::$app->request->isAjax) 
{ 
    $model->refresh(); 
    Yii::$app->response->format = 'json'; 
    return ActiveForm::validate($model); 
} 
elseif($model->load(Yii::$app->request->post()) && $model->save()) 
{ 
    \\do something 
} 

В модели:

public function rules() 
{ 
    return [ 
       [ 
        'username', 
        'unique', 
        'targetClass' => 'com\modules\admin\models\MUser', 
        'message'  => 'Username exist', 
       ] 
      ]; 
} 

Может кто-нибудь, дайте мне знать, что не так я делаю?

+0

Показать 'com \ modules \ admin \ models \ MUser' model –

+0

Вы подготовили контроллер для возврата правильного ответа в случае запроса AJAX? Показать код контроллера. – arogachev

+0

попытка 'enableClientValidation' => ложный – Kshitiz

ответ

3

изменение

return ActiveForm::validate($model) 

К

echo json_encode(ActiveForm::validate($model)); 
     \Yii::$app->end(); 

ActiveForm::validate($model) является массивом он должен быть представлен в виде JSON, которая производится json_encode и \Yii::$app->end(); убедившись, что приложение останавливается на только checking.Also убедитесь, что вы после имен:

use yii\web\Response; 
use yii\widgets\ActiveForm; 

Но Поступая таким образом представление через AJAX вашей формы не будет работать идеальный способ использует validationUrl.