Проверка Yii2 ActiveForm не работает с модальностью начальной загрузки при первой загрузке - PullRequest
0 голосов
/ 07 ноября 2018

"Проверка ActiveForm не будет работать при первой модальной загрузке, НО во второй раз, если вы не обновите страницу и просто закроете модальное окно и загрузите ее снова."

Это происходит даже при новой установке yii2-app-basic.

Какие шаги приведут к возникновению проблемы?

Создайте представление views/site/modal.php и добавьте модальный код, как показано ниже, с дополнительнымкнопка и js код для открытия модального окна при нажатии кнопки и событие привязки shown.bs.modal для загрузки представления внутри раздела модального содержимого после отображения модального режима

<?php

use yii\bootstrap\Modal;
use yii\helpers\Html;

Modal::begin([
    'id' => 'contact',
]);
?>

<div class="modal-header">
    <h4>Contact</h4>
</div>

<div class="modal-body">

</div>

<div class="modal-footer">
    <?php
    echo Html::submitButton('Add Folder Now', ['class' => 'btn btn-primary']);
    ?>

</div>

<?php Modal::end() ;

 echo Html::button('button', ['class'=>'btn btn-primary','id'=>'add-folder-button']);

 $js=<<< js
        $("#add-folder-button").on('click',function(){
            $( '#contact' ).modal( {show:true});
            $( '#contact' ).appendTo("body");
        });

         $( '#contact' ).on( 'shown.bs.modal', function ( event ) {
            // var button = $(event.relatedTarget); // Button that triggered the modal
            let modal = $( this );
            modal.find( '.modal-header > h4' ).text( 'Contact Us' );
            modal.find( '.modal-body' ).load( 'contact');
        } );
js;
$this->registerJs($js,\yii\web\View::POS_READY);

Создание действия внутри SiteControllerчтобы загрузить вышеупомянутый вид

public function actionModal(){
    return $this->render('modal');
}

Теперь измените actionContact внутри SiteController, как показано ниже, для загрузки внутри модального окна

/**
     * Displays contact page.
     *
     * @return Response|string
     */
    public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');
            return $this->refresh();
        }
        return $this->renderAjax('contact', [
            'model' => $model,
        ]);
    }

Для вида:Вы можете использовать стандартный вид contact.php внутри папки views/site, просто добавив приведенный ниже код поверх вида

$js=<<< js
        alert("hello");
js;
$this->registerJs($js);

Каков ожидаемый результат?

при нажатии на кнопкумодальное окно должно загрузиться и как только видзагружен, он должен показать вам alert("hello"), и если я прокручиваю / TAB через поля, он должен запустить проверку ActiveForm клиента.

Примечание: я даже пытался указать 'enableClientValidation'=>true в параметрах формы.

Что вы получаете вместо этого?

он ничего не показывает и не показываетalert также не запускает проверку, вместо этого, если вы закроете и снова нажмете кнопку, чтобы открыть модальное окно, тогда все будет работать правильно.Отображается предупреждение, и проверка клиента работает.но если вы обновите страницу снова, она не будет работать снова, пока вы не откроете модальное окно, не закроете его и не откроете снова.

Вышеупомянутый сценарий отлично работает в версиях Yii 1.x, и у меня это работаетЯ работаю над расширением yii1.x, чтобы преобразовать его в yii2.x

Дополнительная информация

| Q                | A
| ---------------- | ---
| Yii version      | 2.0.15.1
| PHP version      | 5.6
| Operating system | windows

Примечание. Я добавил проблему в GITHUB-yiisoft но он был помечен как вопрос, хотя это самая базовая настройка для открытия формы внутри модального окна, и я использовал ее в прошлом, но в настоящее время она не работает, и это не нормальное поведениелибо он должен работать, либо вообще не должен работать, если Yii не поддерживает его.

...