Проверка Yii2 renderPartial clientSide не работает

Не работает проверка renderPartial clientSide. Я хочу отобразить часть формы с помощью ajax. Пример: _form.php

$form = ActiveForm::begin([
    'options' => [
        'enableAjaxValidation' => true,
    ]
]); 
$form->field($model, 'category_id')->dropDownList($category, [
'onchange'=>'
    $.get( "'.Url::toRoute('/controller/params').'", { id: $(this).val() } )
           .done(function( data ) {
                     $( "#offers-param-content" ).html( data );
           }
     );'
]);

Контроллер.php

public function actionParams($id)
{
    $model = new Param();
    $params = EavAttribute::find()->where(['category_id'=>$id])->all();
    $this->renderPartial('_params', ['model' => $model, 'params' => $params];
}

_params.php

foreach($params as $item){
    echo Html::activeTextInput('text', $model, $item->name);
}

person user3185208    schedule 31.01.2016    source источник
comment
Пробовали ли вы использовать renderAjax()< /а>?   -  person Insane Skull    schedule 01.02.2016


Ответы (3)


Если вы хотите включить проверку клиента, установите для этого свойства значение true.

$form = ActiveForm::begin([
    'options' => [
        'enableAjaxValidation' => true,
    'enableClientValidation'=>true

    ]
]); 

И используйте функцию renderAjax() вместо renderPartial(), она будет внедряться в результат рендеринга с помощью сценариев JS/CSS и файлов, зарегистрированных в представлении.

person Anamika Shrivastava    schedule 01.02.2016

В вашем Controller.php вам нужно установить layout на false и die выполнение

public function actionParams($id)
{
    $this->layout = false;
    $model = new Param();
    $params = EavAttribute::find()->where(['category_id'=>$id])->all();
    $this->renderPartial('_params', ['model' => $model, 'params' => $params];
    die;
}
person Sohel Ahmed Mesaniya    schedule 31.01.2016

Вы не возвращаете никаких ошибок проверки из вашего контроллера в ваше представление. Чтобы заархивировать это использование

yii\widgets\ActiveForm::validate($yourModel);

Если вы не используете активную форму, вы можете вернуть ошибки с помощью

$model->getErrors();//will return errors from $model->validate()

Из вашего отрывка попробуйте это

public function actionParams($id) {
        $model = new Param();
        if ($model->load(Yii::$app->request->post())) {
            if (Yii::$app->request->isAjax) {
                Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
                return ActiveForm::validate($model); /* Validation error messages are returned by this static function */
            }
            $params = EavAttribute::find()->where(['category_id' => $id])->all();
            $this->renderPartial('_params', ['model' => $model, 'params' => $params]);
        }
    }
person chapskev    schedule 01.02.2016