使用unclead / yii2-multiple-input的Yii2加载计划

时间:2018-08-14 18:45:20

标签: yii2

我正在使用unclead / yii2-multiple-input小部件。

我想使用数据库中的值生成不同数量的行。 我该怎么办?

我可以在视图中设计列,并在页面生成后手动编辑数据。但是错过了如何在视图中编程行数及其值。

查看我的代码:

 <?= $form->field($User, 'User')->widget(MultipleInput::className(), [
        'min' => 0,
        'max' => 4,
        'columns' => [
            [
                'name'  => 'name',
                'title' => 'Name',
                'type' => 'textInput',
                'options' => [
                    'onchange' => $onchange,
                ],
            ],
            [
                'name'  => 'birth',
                'type'  => \kartik\date\DatePicker::className(),
                'title' => 'Birth',
                'value' => function($data) {
                    return $data['day'];
                },

                'options' => [
                    'pluginOptions' => [
                        'format' => 'dd.mm.yyyy',
                        'todayHighlight' => true
                    ]
                ]
            ],

        ]
        ])->label(false);

我如何制作(例如)8个具有不同值的行,并且还能够编辑/删除/更新其中的某些行?

1 个答案:

答案 0 :(得分:2)

您需要查看文档,因为它说您需要在模型中分配一个单独的字段,该字段将以JSON格式存储所有计划,然后在编辑/更新模型时将其提供回该字段。 / p>

您尚未添加适当的模型来验证在上述给定情况下如何创建字段User。因此,我将尝试创建一个简单的示例,以帮助您在场景中实现它。

例如。

您必须将用户以及他最喜欢的书存储在数据库中。

User
id, name, email

Books
id, name
  • User表中使用文本类型的名称schedule创建一个字段/列,您可以编写迁移或手动添加。
  • 将其添加为User的{​​{1}}模型中的规则。

    如下所示

    safe
  • 将窗口小部件添加到public function rules() { return [ ....//other rules [ [ 'schedule'] , 'safe' ] ]; }

    中新创建的列中

    请参见下面的代码

    ActiveForm
  • 保存echo $form->field($model,'schedule')->widget(MultipleInput::class,[ 'max' => 4, 'columns' => [ [ 'name' => 'book_id', 'type' => 'dropDownList', 'title' => 'Book', 'items' => ArrayHelper::map( Books::find()->asArray()->all (),'id','name'), ], ] ]); 模型时,将数组转换为JSON字符串。

    如下所示

    User
  • 在加载表单之前,重写if( Yii::$app->request->isPost && $model->load(Yii::$app->request->post()) ){ $model->schedule = \yii\helpers\Json::encode($model->schedule); $model->save(); } 模型的afterFind()以将json隐匿到数组中。

    如下所示

    User

现在,当针对当前用户保存public function afterFind() { parent::afterFind(); $this->schedule = \yii\helpers\Json::decode($this->schedule); } 字段时,书籍的选定行将具有JSON,与所选择的行一样,例如,如果我保存了三本ID为(1,2,3)的书籍那么它将具有如下的json

schedule

上面的JSON将被转换为{ "0": { "book_id": "1" }, "2": { "book_id": "2" }, "3": { "book_id": "3" } } 中的数组,这样,当您编辑记录时,小部件将加载保存的计划。

现在转到更新页面或编辑新保存的模型,您将看到自动加载的图书。