Yii2动态表单创建错误-必须设置'model'属性,并且必须从'\ yii \ base \ Model'扩展

在Yii2中,我一直在尝试使用以下教程创建动态表单。
Yii2-dynamicForm - GitHubYoutube Tutorial

我遵循了教程中提到的相同步骤,很不幸,我遇到了一个错误(附有屏幕截图)

Yii2动态表单创建错误-必须设置'model'属性,并且必须从'\ yii \ base \ Model'扩展

我无法解决此错误,任何人都可以帮助我找到我所缺少的内容。

作为参考,我将在此处附加我的模型,其余的控制器和视图与教程相同。

请求模型

   <?php

namespace app\models;

use Yii;
class Request extends \yii\db\activeRecord
{

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


    public function rules()
    {
        return [
            [['req_date','req_on','req_updated_on'],'safe'],[['req_job','req_type','material_type','req_status'],'required'],[['req_by'],'integer'],[['req_status'],'string'],'req_type'],'string','max' => 100],[['material_type'],'max' => 150],];
    }

    public function attributeLabels()
    {
        return [
            'req_id' => 'Req ID','req_date' => 'Req Date','req_job' => 'Job No','req_type' => 'Type of Request','req_on' => 'Required On','material_type' => 'Material Type','req_by' => 'Req By','req_updated_on' => 'Req Updated On','req_status' => 'Request Status',];
    }
}  

RequestItems模型

    <?php

namespace app\models;

use Yii;
use yii\base\Model;

/**
 * This is the model class for table "request_items".
 *
 * @property int $req_item_id
 * @property int $req_id
 * @property string $item_name
 * @property string $item_qty
 * @property string $item_unit
 */
class RequestItems extends \yii\db\activeRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'request_items';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['req_id','item_name','item_qty','item_unit'],[['req_id'],[['item_name'],[['item_qty','max' => 25],];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'req_item_id' => 'Req Item ID','req_id' => 'Req ID','item_name' => 'Item Name','item_qty' => 'Item Qty','item_unit' => 'Item Unit',];
    }
}      

_form.php

    <?php

use yii\helpers\Html;
use yii\widgets\activeForm;
use wbraganca\dynamicform\DynamicFormWidget;
use kartik\select2\Select2;
use kartik\checkbox\CheckboxX;
/* @var $this yii\web\View */
/* @var $model app\models\Request */
/* @var $form yii\widgets\activeForm */
?>

<div class="request-form">

    <?php $form = activeForm::begin(['id' => 'dynamic-form']); ?>
    <?= $form->field($model,'req_date')->hiddenInput()->label(false) ?>

    <div class="row">
        <div class="col-sm-6">
            <?php
                $data = ['1001' => '1001/Sample Job 1','1002' => '1002/Sample Job 2','1003' => '1003/Sample Job 3']; 
                echo $form->field($model,'req_job')->widget(Select2::classname(),[
                'data' => $data,'class'=>'form-control','options' => ['placeholder' => 'Select a state ...'],'pluginOptions' => [
                    'allowClear' => true
                ],]); ?>
        </div>
        <div class="col-sm-6">
            <?= $form->field($model,'req_type')->radioList(array('Urgent'=>'Urgent','Normal'=>'Normal'));  ?>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-6">
            <?= $form->field($model,'req_on')->input('date') ?>
        </div>
        <div class="col-sm-6">
            <?= $form->field($model,'material_type')->radioList(array('Civil'=>'Civil','Mechanical'=>'Mechanical','Manpower'=>'Manpower')); ?>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-6">
            <?= $form->field($model,'req_by')->hiddenInput()->label(false) ?>
        </div>
        <div class="col-sm-6">
            <?= $form->field($model,'req_updated_on')->hiddenInput()->label(false) ?>
        </div>
    </div>


<!-- code for dynamic form -->
<div class="panel panel-default">
        <div class="panel-heading"><h4><i class="glyphicon glyphicon-envelope"></i> Request Items</h4></div>
        <div class="panel-body">
             <?php DynamicFormWidget::begin([
                'widgetcontainer' => 'dynamicform_wrapper',// required: only alphanumeric characters plus "_" [A-Za-z0-9_]
                'widgetBody' => '.container-items',// required: css class selector
                'widgetItem' => '.item',// required: css class
                'limit' => 4,// the maximum times,an element can be cloned (default 999)
                'min' => 1,// 0 or 1 (default 1)
                'insertButton' => '.add-item',// css class
                'deleteButton' => '.remove-item',// css class
                'model' => $modelsAddress,'formId' => 'dynamic-form','formFields' => [
                    'item_name','item_unit',],]); ?>

            <div class="container-items"><!-- widgetcontainer -->
            <?php foreach ($modelsAddress as $i => $modelAddress): ?>
                <div class="item panel panel-default"><!-- widgetBody -->
                    <div class="panel-heading">
                        <h3 class="panel-title pull-left">Requested Items</h3>
                        <div class="pull-right">
                            <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button>
                            <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                    <div class="panel-body">
                        <?php
                            // necessary for update action.
                            if (! $modelAddress->isnewRecord) {
                                echo Html::activeHiddenInput($modelAddress,"[{$i}]id");
                            }
                        ?>
                        <?= $form->field($modelAddress,"[{$i}]item_name")->textInput(['maxlength' => true]) ?>
                        <div class="row">
                            <div class="col-sm-6">
                                <?= $form->field($modelAddress,"[{$i}]item_qty")->textInput(['maxlength' => true]) ?>
                            </div>
                            <div class="col-sm-6">
                                <?= $form->field($modelAddress,"[{$i}]item_unit")->textInput(['maxlength' => true]) ?>
                            </div>
                        </div><!-- .row -->
                    </div>
                </div>
            <?php endforeach; ?>
            </div>
            <?php DynamicFormWidget::end(); ?>
        </div>
    </div>






    <?= $form->field($requestModel,'req_status')->dropDownList(['Requested' => 'Requested','Approved' => 'Approved','Rejected' => 'Rejected','Hold' => 'Hold',['prompt' => '']) ?>

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

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

</div>
kdokdokdop 回答:Yii2动态表单创建错误-必须设置'model'属性,并且必须从'\ yii \ base \ Model'扩展

您需要更改

'model'=>$modelsAddress

'model'=>$modelsAddress[0]

如基本示例所述,它是一个模型数组以及您传递的方式,它将被检测为数组而不是模型。

本文链接:https://www.f2er.com/2780020.html

大家都在问