10

I want to create ActiveForm without model for just in case something. I did try with dynamicModel but i got some error :

use yii\base\DynamicModel;
$model = DynamicModel::validateData(compact('KOMENTAR'), [
   [['KOMENTAR'], 'string', 'max' => 128],
]);

This is the form i want to create

<br>
<?php $form = ActiveForm::begin([
    'method' => 'post',
]); ?>

<?= $form->field($model, 'KOMENTAR')->textarea(['rows' => 6])->label(false) ?>

<div class="form-group">
    <?= Html::submitButton('POST', ['class' => 'btn btn-primary']) ?>
</div>

This is the error

Getting unknown property: yii\base\DynamicModel::KOMENTAR
GAMITG
  • 3,670
  • 7
  • 30
  • 50

2 Answers2

20

Normally ActiveItems are used to work with a model, but Yii2 have a helper class called Html to use the same items like classic HTML.

Use beginForm() method from Html. And try something like that:

use yii\helpers\Html;

<?= Html::beginForm(['/controller/view', 'id' => $model->id], 'POST'); ?>
<?= Html::textarea('KOMENTAR', '', ['rows' => 6])->label(false); ?>
<div class="form-group">
    <?= Html::submitButton('POST', ['class' => 'btn btn-primary']); ?>
</div>
<?= Html::endForm(); ?>

You can read more about this helper in the documentation.

rob006
  • 18,710
  • 5
  • 41
  • 58
Sageth
  • 1,072
  • 1
  • 14
  • 29
  • 4
    Do not use BaseHtml. Use yii\helpers\Html instead. – Tony Sep 03 '15 at 07:18
  • 1
    You are wrong about "Html have more tools for view design", you should read this http://www.yiiframework.com/doc-2.0/guide-helper-overview.html#customizing-helper-classes – soju Sep 03 '15 at 07:45
  • 1
    You should check your Code, there are some synthax errors in it like at `beginForm()([ 'method' => 'post', ])` and `(['rows' => 6, name='KOMENTAR'])` – bnu Mar 02 '16 at 15:32
12

Since you are using compact('KOMENTAR'), you should have a $KOMENTAR variable.

Read more about compact : http://php.net/manual/fr/function.compact.php

Or you should simply create your model like this :

$model = new \yii\base\DynamicModel(['KOMENTAR']);
$model->addRule(['KOMENTAR'], 'string', ['max' => 128]);
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    // do what you want 
}
soju
  • 24,068
  • 3
  • 63
  • 66