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

Я сдалась... Getting unknown property: app\models\forms\SignupForm::name?

Здравствуйте, целый день борюсь с одной ошибкой...
5bf15637e9cd8855698451.png
Мне кажется, что проблема в контроллере, но не пойму в чём именно проблема, помогите пожалуйста..
В одном экшине я использую две модели.. правильно ли это?
Или может ошибка совсем из за другого?

SiteController.php:

public function actionIndex()
    {
        /* Создаем экземпляр класса */
        $model = new ContactForm();
        $model->put_date = date('y-m-d');
        $model->hide = 'show';
        /* получаем данные из формы и запускаем функцию отправки contact, если все хорошо, выводим сообщение об удачной отправке сообщения на почту */
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            Yii::$app->session->setFlash('success', 'Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее');
            return $this->refresh();
            /* иначе выводим форму обратной связи */
        }
        

        if (!\Yii::$app->user->isGuest)
            return $this->redirect(['/user/profile/index']);

        $model = new SignupForm();
        if ($model->load(\Yii::$app->request->post())) {
            if ($model->signup() === true) {
                return $this->render('success', [
                    'model' => $model,
                ]);
            }
        }
        return $this->render('index', [
            'model' => $model,
        ]);


    }


И естественно в одной вьюхе использую две формы, одну для контактов а вторую для регистрации..

<?php $form = ActiveForm::begin([
                            'method' => 'POST',
                            'options' => [
                                    'class' => 'form-inline',
                            ]

                    ]); ?>

                        <?= $form->field($model, 'username', ['inputOptions' => ['class' => 'form-control email']])->label(false) . $model->getAttributeLabel('Ваше Имя') ?>

                        <?= $form->field($model, 'email', ['inputOptions' => ['class' => 'form-control email']])->label(false) . $model->getAttributeLabel('Ваш E-mail') ?>

                    <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>

                    <?php if ($model->hasReferer() != null) { ?>
                    Вас пригласил <?= $model->getReferer()->getUsername() ?>
                    <?php } ?>

                        <input type="submit" class="submit" value="Регистрация">

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


<div class="contact_from">
                    <?php if (Yii::$app->session->hasFlash('success')): ?>

                        <p class="success" id="success" style="display:none;"></p>
                        Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее
                        </p>
                    <?php else: ?>

                    <?php $form = ActiveForm::begin(['id' => 'contact_form']); ?>
                    <!-- Message Input Area Start -->
                    <div class="contact_input_area">
                        <div class="row">

                            <div class="col-md-12">
                                <div class="form-group">
                                    <?= $form->field($model, 'name', ['inputOptions' => ['class' => 'form-control', 'id' => 'name']])->textInput(['placeholder' => "Ваше имя"])->label(false); ?>
                                </div>
                            </div>
                                    <?= $form->field($model, 'email', ['inputOptions' => ['class' => 'form-control', 'id' => 'email']])->textInput(['placeholder' => "Ваш E-mail"])->label(false); ?>
                            <div class="col-md-12">
                                <div class="form-group">
                                    <?= $form->field($model, 'subject', ['inputOptions' => ['class' => 'form-control', 'id' => 'subject']])->textInput(['placeholder' => "Тема сообщения"])->label(false); ?>
                                </div>
                            </div>
                            <div class="col-12">
                                <div class="form-group">
                                    <?= $form->field($model, 'body', ['inputOptions' => ['class' => 'required valid', 'id' => 'message']])->textarea(['cols' => 30,'rows' => 4])->label(false); ?>
                                </div>
                            </div>
                            <div class="col-12">
                                <div class="form-group">
                                    <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>
                                </div>
                            </div>
                            <div class="col-12">
                            <?= Html::submitButton(\Yii::t('app', 'Отправить'), ['class' => 'btn submit-btn']) ?>
                            </div>
                        </div>
                    </div>

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

                    <?php endif; ?>
  • Вопрос задан
  • 4653 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Проблема в том, что где-то Ваш код обращается к свойству name объекта app\models\forms\SignupForm А его там нет. Если Вы посмотрите весь стек, а не его последнюю запись, то увидите где именно Вы к нему обращаетесь.
У меня есть идея что это
<?= $form->field($model, 'name', ['inputOptions' => ['class' => 'form-control', 'id' => 'name']])->textInput(['placeholder' => "Ваше имя"])->label(false); ?>

Происходит это видимо из-за того, что в экшене при рендере
return $this->render('index', [
            'model' => $model,
        ]);

Вы в $model имеете не ContactForm, как Вы ожидаете, а SignupForm. Так как
$model = new SignupForm();
Но не факт, в ошибке есть точные данные. Дайте полный стек вызовов из ошибки, если сами не можете найти.
Ответ написан
@AlexndrNovikov
Solution Architect in Spiral Scout
второй блок кода
<?= $form->field($model, 'name', ['inputOptions' => ['class' => 'form-control', 'id' => 'name']])->textInput(['placeholder' => "Ваше имя"])->label(false); ?>


видимо должно быть

<?= $form->field($model, 'username', ['inputOptions' => ['class' => 'form-control', 'id' => 'name']])->textInput(['placeholder' => "Ваше имя"])->label(false); ?>


Или же если нет (так как код класса не приведен точно не могу сказать) - просто соответствовать полям модели SignupForm по наименованию
Ошибка просто говорит, что в классе SignupForm нет поля name, но первый блок кода пытается его вывести и ругается
Ответ написан
Комментировать
@Arik
что за модель?
return $this->render('index', [
            'model' => $model,
        ]);


намного яснее было бы

return $this->render('index', [
            'сontactForm' => $сontactForm,
            'signupForm' => $signupForm,
        ]);


что-то мне подсказывает что это и есть проблема, вы переписываете переменную model и ждете форму, которой уже нет (переписали)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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