yii2 — динамическая активация и проверка клиента

#yii #yii2

#yii #yii2

Вопрос:

Я динамически отображаю ActiveForm через ajax, однако, поскольку форма отсутствует при загрузке страницы, необходимые файлы JS yiiActiveForm.js , yii.validation.js ) и связанные триггеры проверки отсутствуют, когда форма выводится эхом.

Вот несколько примеров кода:

JS:

 $('.btn-edit').on('click', function() {
    var id = $(this).attr('data-id');
    var url = base_url   '/account/editreview/'   id;

    $.ajax({
        type: 'post',
        url: url,
        dataType: 'json',
        success: function(result) {
            $('.popup').html(result.html);
        }
    });
});
 

Контроллер:

 public function actionEditReview($id)
{
    $return_array = [
        'html' => null,
    ];

    $review = $this->findReview($id);

    $return_array['html'] = $this->renderPartial('review-popup', [
        'review' => $review,
    ]);

    echo json_encode($return_array);
}
 

Просмотр (review-popup.php ):

 <?php
use yiiwidgetsActiveForm;
?>

<?php $form = ActiveForm::begin([
    'id' => 'review-form',
    'enableAjaxValidation' => false,
    'enableClientValidation' => true,
]); ?>

<?php echo $form->field($review, 'title')->textInput(); ?>

<button type="submit" class="btn-edit" data-id="<?php echo $review->id; ?>">Submit</button>

<?php ActiveForm::end(); ?>
 

Я прочитал примечания на этой странице https://yii2-cookbook.readthedocs.io/forms-activeform-js / но это говорит о добавлении проверки к отдельным атрибутам, а не ко всей форме.

Кто-нибудь знает, как это сделать?

Ответ №1:

Я нашел решение: использовать renderAjax() вместо renderPartial() при повторном отображении представления.

http://www.yiiframework.com/doc-2.0/yii-web-view.html#renderAjax ()-деталь