kdes70
@kdes70
Web developer

Yii2 как подгрузить и волидировать в форму, поля формы другой модели?

Здравствуйте коллеги!
Помогите решить проблему,
есть форма которая реализует модель AgentUser :

<?php $form = ActiveForm::begin(); ?>
        <div class="row">
            <div class="col-md-6">
                <?= $form->field($model, 'user_id')->textInput()->hint('Прекрепить пользователя из системы') ?>
            </div>
            <div class="col-md-6">
                <?= $form->field($model, 'relations')->dropDownList($model->getRelations()); ?>
            </div>
        </div>
        <!--   Доп. форма-->
        <div id="is-dogovar" style="display: none"></div>
        <!--   Доп. форма end-->
.....


в форме есть поле "relations"

private $_relations = [
        0 => 'Без договора',
        1 => 'Договор',
        2 => 'Соглашение',
        3 => 'Друзья',
    ];


если выбираем "Договор" то должны под грузиться дополнительный поля формы из другой модели. я сделал это традиционным путем
<?php
$script = <<< JS

 renderContractForm($('#agentlegal-relations option:selected').val());

$('#agentlegal-relations').on('change', function() {
    var relations = $('#agentlegal-relations option:selected').val();
     renderContractForm(relations);
 });
 
 function renderContractForm(relations) {
     if(relations == 1)
    {   
    	$.post('/accounting/agent-legal/render-contract-form', {is_contract:relations})
    	    .then(function(response) {
                $('#is-dogovar').html(response);
                $('#is-dogovar').fadeIn();  
    	    }, function(error) {
    	    	console.log('error', error);
    	    })
    } else{
    	$('#is-dogovar').empty();
        $('#is-dogovar').fadeOut();
    }
}
JS;
//маркер конца строки, обязательно сразу, без пробелов и табуляции
$this->registerJs($script, yii\web\View::POS_READY);

?>


отправляем ajax запрос в контролер который отрендарит нам доп. вьюху

public function actionRenderContractForm()
    {
        if (\Yii::$app->request->isAjax) {

            $is_contract = Yii::$app->request->post('is_contract');
            if ($is_contract) {

                $model_contr = new AgentContract();
                echo $this->renderAjax('_contract_form', ['model_contr' => $model_contr]);
            }
        }
    }


так вот проблема заключается в том что доп.форме ActiveForm будет генерировать вложенный тег form, Может кто подскажет какие могут решения,
  • Вопрос задан
  • 434 просмотра
Решения вопроса 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Использовать activeTextInput без формы. просто поля выводить во вьюхе вложенной.
Клац
Можно выводить сразу все поля, ненужные скрывать в display:none; потом при необходимости показывать, это если поля не динамические.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы