#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 ()-деталь