Задать вопрос
@Nidxegg

Как устранить проблему с валидацией двух моделей с одной формы yii2?

Здравствуйте. возникла проблема с тем что при полной проверке валидации вылетает ошибка что поля не заполнены. Пока он не проходит валидацию появляются подсказки как и должны быть. Когда все поля заполнены верно подсказки исчезают и данные не идут. распечатываю ошибки валидации говорит поля не заполнены. Как будто пост куда то пропадает, хотя внутри контроллера я могу распечатывать данные и он же чем то заполняет поля.

код контроллера.

public function actionValueCounter()
    {
        $vladelcy = new Vladelcy();
        $dogovor = new Dogovor();


        if ($vladelcy->load(Yii::$app->request->post()) and $dogovor->load(Yii::$app->request->post()));   //при правильном заполнении код дальше не идет
        {
            $valid_dogovor = $dogovor->validate();
            $valid_vladelcy = $vladelcy->validate();
            
            if ($valid_vladelcy == TRUE && $valid_dogovor == TRUE) {
                $info_chel = Vladelcy::find()
                    ->joinWith('dogovor')
                    ->where(['dogovor.dogovorid' => $dogovor->dogovorid, 'vladelcy.familiya' => $vladelcy->familiya])
                    ->one();

                if (empty($info_chel)) {
                    echo 'совпадений не найдено';
                    die();
                } else {
                    $ulic = substr($info_chel->abonentid, 0, 4);
                    $ulica = Ulicy::findOne($ulic);

                    return $this->render('view_result_value', ['account' => $info_chel, 'ulica' => $ulica]);
                }
            }
        }
      return $this->render('valuecounter', ['vladelcy' => $vladelcy, 'dogovor' => $dogovor]);
    }


код вида
<div class="x_content">
                <br />
                   <?php  $form = ActiveForm::begin([
                    'id' => 'demo-form2',
                       'action' => ['site/value-counter'],

                    'options' => [
                    'class' => 'form-horizontal form-label-left'],
                    ]);?>
                  < <div class="form-group">
                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Лицевой счет<span class="required"></span>
                        </label>
                        <div class="col-md-6 col-sm-6 col-xs-12">
                            <?=$form->field($dogovor, 'dogovorid', ['inputOptions' => ['class' => 'form-control col-md-7 col-xs-12']])->textInput()->input('text', ['placeholder' => "номер вашего договора"])->label(false); ?>
                        </div>
                         </div>
                <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">Фамилия владельца<span class="required"></span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                        <?=$form->field($vladelcy, 'familiya', ['inputOptions' => ['class' => 'form-control col-md-7 col-xs-12']])->textInput()->input('text', ['placeholder' => "Фамилия владельца"])->label(false); ?>
                    </div>
                </div>

                    <div class="ln_solid"></div>
                    <div class="form-group">
                        <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">

                            <?= Html::submitButton('Выбрать', ['class' => 'btn btn-primary']) ?>
                        </div>
                    </div>

            <?php  $form = ActiveForm::end();?>
            </div>


код моделей
public static function tableName()
    {
        return 'dogovor';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['abonentid','dogovorid'], 'required'],
            ['dogovorid', 'integer'],
            [['abonentid', 'dogovordata', 'telefon', 'kategoriya', 'socialid', 'datas', 'datapo', 'deystvuyushiy', 'dataizmeneniya'], 'string'],
        ];
    }


public static function tableName()
    {
        return 'vladelcy';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['dogovorid', 'familiya'], 'required'],
            [['dogovorid', 'sobstvennostID', 'nomer'], 'integer'],
            [['abonentid'], 'string', 'max' => 15],
            [['familiya', 'imya', 'otchestvo'], 'string', 'max' => 200],
            [['datas'], 'string', 'max' => 50],
            [['dogovorid'], 'exist', 'skipOnError' => true, 'targetClass' => Dogovor::className(), 'targetAttribute' => ['dogovorid' => 'dogovorid']],
        ];
    }

public function getDogovor()
    {
        return $this->hasOne(Dogovor::className(), ['dogovorid' => 'dogovorid']);
    }

79328ff2d4fe405988ec23cbf8542702.jpg
  • Вопрос задан
  • 243 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
qonand
@qonand
Software Engineer
смотрите правила валидации, для модели dogovor - Вы заполняете в форме атрибут dogovorid, а сама модель атрибуты dogovorid и familiya определяет ОБЯЗАТЕЛЬНЫМИ для заполнения. с второй моделью ситуация такая же
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы