Yii2 使用无线索/yii2-多输入加载计划



我正在使用unclead/yii2-multi-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'  => kartikdateDatePicker::className(),
'title' => 'Birth',
'value' => function($data) {
return $data['day'];
},
'options' => [
'pluginOptions' => [
'format' => 'dd.mm.yyyy',
'todayHighlight' => true
]
]
],
]
])->label(false);

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

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

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

例如。

您必须将用户与他喜欢的书籍一起存储在数据库中。

User
id, name, email
Books
id, name
  • 在表中创建一个User名称为文本类型的schedule字段/列,您可以编写迁移或手动添加。
  • 将其作为safe添加到User模型中的规则中。

    像下面一样

    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'),
    ],
    ]
    ]);
    
  • 保存User模型时,将数组转换为 JSON 字符串。

    像下面一样

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

    像下面一样

    public function afterFind() {
    parent::afterFind();
    $this->schedule = yiihelpersJson::decode($this->schedule);
    }
    

现在,当保存针对当前用户的schedule字段时,将具有所选书籍行的JSON,例如,如果我保存了三本具有ids(1,2,3(的书,那么它将具有如下所示的json。

{
"0": {
"book_id": "1"
},
"2": {
"book_id": "2"
},
"3": {
"book_id": "3"
}
}

上述 JSON 将在afterFind()中转换为数组,以便小部件在您编辑记录时加载保存的计划。

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

最新更新