@66demon666

Yii2 обаботка формы без ActiveForm?

Всем добра. Начал я ковырять Yii, не без помощи добрых людей, обнаружилась неприятная особенность - не поддерживается bootstrap 4. Установил компонент, прописал конфиги, всё хорошо работает. До тех пор, пока я не вставляю виджет. Как только вставляю виджет - ошибка
Method yii\widgets\ActiveField::__toString() must not throw an exception, caught Error: Call to a member function isAttributeRequired() on null

Если честно, не уверен, в bootstrap ли дело.

Кусочек шаблона с формой:
<?use yii\widgets\ActiveForm;?>
....
<?
          $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'landing-form auth align-middle'],
]) ?>
    <?= $form->field($model, 'username') ?>
    <?= $form->field($model, 'password')->passwordInput() ?>

    <div class="form-group">
        <div class="col-lg-offset-1 col-lg-11">
            <?= Html::submitButton('Вход', ['class' => 'btn btn-primary']) ?>
        </div>
    </div>
<?php ActiveForm::end() ?>


Контроллер, вызывающий это представление (экшен):
//В use всё подключено
  public function actionLogin() {
    return $this->render("landing");

    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post() && $model->validate())) {
        return $this->goBack();
    }
    return $this->render('landing', [
        'model' => $model,
    ]);
  }


И собственно модель LoginForm:
<?php

namespace app\models;

use Yii;
use yii\base\Model;

/**
 * LoginForm is the model behind the login form.
 *
 * @property User|null $user This property is read-only.
 *
 */
class LoginForm extends Model
{
    public $username;
    public $password;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // username and password are both required
            [['username', 'password'], 'required'],
        ];
    }


    public function validate()
    {
      return true;
    }
}
?>


То есть сделал пока элементарно для проверки, но не пойму что есть причина ошибки
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Ваша ошибка здесь
public function actionLogin() {
    return $this->render("landing");

   // ......

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


Вы подключаете представление с формой, куда не передаёте саму форму. Потом обрабатываете данные с формы и опять же подключаете этот же представление. В представлении виджет ждёт атрибуты формы, а их нет, поэтому и ошибка

Так что bootstrap тут совершенно ни при чём.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmitrylee
ты свою форму покажи, а не из документации
Ответ написан
Ваш ответ на вопрос

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

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