向DynamicModel添加属性标签Yii

时间:2016-07-31 11:20:17

标签: yii2 yii-extensions yii2-advanced-app yii-components

我有很多问题和答案。我使用DynamicModel()来收集这些数据。

$attributes = [
      "answer_1" => "Some Value 1",
      "answer_2" => "Some Value 2",
      "answer_3" => "Some Value 3",
      .....
]

$customFormModel = new DynamicModel($attributes);

我也有

$labels = [
      "answer_1" => "Label 1",
      "answer_2" => "Label 2",
      "answer_3" => "Label 3",
      .....         
]

我无法将$ label数组设置为动态模型的标签属性。 我的$ customFormModel-> attributeLabels()始终为空。

这些结果存在以下问题。 我收到像这样的错误消息

Answer 1 can not be blank
Answer 2 can not be blank
Answer 3 can not be blank

我想要的是

Label 1 can not be blank
Label 2 can not be blank
Label 3 can not be blank

3 个答案:

答案 0 :(得分:0)

试试这个

$customFormAttributes = array_map(function ($key) use ($attributes) {
    return $attributes[$key];
}, array_flip($labels));

$customFormModel = new DynamicModel($customFormAttributes);

答案 1 :(得分:0)

您好像在这里滥用DynamicModel概念。这应该用于ad hoc validation来处理表单呈现。如果您需要添加标签,请使用常规Model

您可以扩展DynamicModel并在其中添加attributeLabels()并使用您的新方法。但是,当您可以创建包含随时可用的所有内容的常规模型时,使用DynamicModel有什么意义呢?

对于自定义属性标签,您可以添加ActiveField窗口小部件方法label()

<?= $form->field($customFormModel, 'attribute')->label('...') ?>

或来自HtmlHtml::label()Html::activeLabel()的静态等价物。

答案 2 :(得分:0)

您可以像这样简单地扩展DynamicModel:

class MyDynamicModel extends DynamicModel
{
    public $attributeLabels = [];

    public function attributeLabels(){   
        return $this->attributeLabels;
    }
}

现在您可以将$ attributeLabels设置为数组