我有很多问题和答案。我使用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
答案 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('...') ?>
或来自Html
类Html::label()
,Html::activeLabel()
的静态等价物。
答案 2 :(得分:0)
您可以像这样简单地扩展DynamicModel:
class MyDynamicModel extends DynamicModel
{
public $attributeLabels = [];
public function attributeLabels(){
return $this->attributeLabels;
}
}
现在您可以将$ attributeLabels设置为数组