Screamie
@Screamie
Full-stack разработчик

Yii2 ActiveForm не принимает значения из модели?

Всем привет!

Сразу к делу. Задача тривиальна до невозможности. Пишем форму фидбэка (в виде анкеты), писал их не раз и все было ок. Сама модель НЕ связана с БД, а сразу после валидации отправляет письмо на почту.

namespace frontend\models;

use yii\base\Model;

class QuestionaryForm extends Model
{
   //.. для краткости пишу не все поля
    public $organization;
    public $position;
    public $username;

public function scenarios()
    {
        //...тут все как обычно 
    }

    //... тут правила валидации
    public function rules(){}
}


Потом собственно форма, тоже ничего нового

<article>
            <? $form = \yii\widgets\ActiveForm::begin() ?>

            <?= $form->field($model, 'organization')?>
            <?= $form->field($model, 'position')?>
            <?= $form->field($model, 'username')?>

            <?= \yii\helpers\Html::submitButton("Отправить", ['class' => 'btn btn-w-svg']) ?>

            <? \yii\widgets\ActiveForm::end();?>
</article>


В контроллере тоже все стандартно

public function actionFeedback()
    {
        $model = new QuestionaryForm();
        $model->scenario = 'default';

       //... здесь действия после отправки формы        

        return $this->render('questionary', ['model' => $model]);
    }


Самое интересное начинается на выходе. При открытии страницы с формой падает буквально все.

Конкретнее. Не подгружаются шаблоны, вообще никакие. Стили и скрипты тоже мимо. И дебагер YII тоже. В инспекторе гугла в теге head вообще ничего.

Ошибок никаких и весь вывод до старта ActiveForm присутствует на странице.
var_dump($model); - возвращает вполне себе живую модель QuestionaryForm с полями == NULL

Если оставить только это:

<article>
            <? $form = \yii\widgets\ActiveForm::begin() ?>

            <?= \yii\helpers\Html::submitButton("Отправить", ['class' => 'btn btn-w-svg']) ?>

            <? \yii\widgets\ActiveForm::end();?>
</article>


То все сразу работает. Пробовал много чего, но голова уже не соображает. Есть ощущение, что проблема прямо под носом, а я ее не вижу. Буду благодарен, если ткнете пальцем)))

Будущим поколениям. Решил сам.

Ошибка была в rules(). Указал вместо валидатора "string", валидатор "text" (часто использовал его в предыдущем проекте и, видимо, привык). Поменял и все завелось.
  • Вопрос задан
  • 271 просмотр
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
По поводу подгрузки стилей, скриптов. У Вас в шаблоне, в head есть
<?= $this->head() ?>

Возьмите форму обратной связи, которая ставится по умолчанию при установке самого yii2, сверьтесь с ней.
Ответ написан
@karminski
Senior React.JS Developer
Ну так у вас же тут пусто:
public function rules(){}
Объявите поля, которые идут в форме как safe - и будет вам счастье.
Ответ написан
Ваш ответ на вопрос

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

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