Добавление меток атрибутов в DynamicModel Yii
У меня динамическое количество вопросов и ответов. Я использую 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 для атрибутов 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 ответа
Вы можете просто расширить DynamicModel следующим образом:
class MyDynamicModel extends DynamicModel
{
public $attributeLabels = [];
public function attributeLabels(){
return $this->attributeLabels;
}
}
теперь вы можете установить $attributeLabels как массив
Попробуй это
$customFormAttributes = array_map(function ($key) use ($attributes) {
return $attributes[$key];
}, array_flip($labels));
$customFormModel = new DynamicModel($customFormAttributes);
Похоже, вы неправильно используете DynamicModel
Концепция здесь. Это следует использовать для специальной проверки, а также для обработки представления формы. Если вам нужно добавить ярлыки, используйте регулярно Model
вместо.
Вы можете продлить DynamicModel
и добавить attributeLabels()
там и используйте ваш новый метод вместо этого. Но какой смысл использовать DynamicModel, когда вы можете просто создать обычную модель со всем готовым к использованию?
Для пользовательской метки атрибута вы можете добавить ActiveField
метод виджета label()
<?= $form->field($customFormModel, 'attribute')->label('...') ?>
или статический эквивалент от Html
учебный класс Html::label()
, Html::activeLabel()
,