Php 在yii2框架中使用动态模型时如何设置属性标签?
在yii2框架中使用动态模型时如何设置属性标签 下面是我的代码:Php 在yii2框架中使用动态模型时如何设置属性标签?,php,yii2,yii2-advanced-app,Php,Yii2,Yii2 Advanced App,在yii2框架中使用动态模型时如何设置属性标签 下面是我的代码: $model = DynamicModel::validateData(compact('name','shipping'), [ [['name','shipping'], 'required'], ]); if ($model->hasErrors()) { // validation fails // } } else { //val
$model = DynamicModel::validateData(compact('name','shipping'), [
[['name','shipping'], 'required'],
]);
if ($model->hasErrors()) {
// validation fails
// }
} else {
//validation true
}
例如:
模型
有关和的详细信息,作为一种简单的解决方法,只需为所需属性设置单独的验证消息:
$model = DynamicModel::validateData(compact('name','shipping'), [
[['name'], 'required', ['message' => Yii::t('app', 'Name is required for this form.')]],
[['name'], 'required', ['message' => Yii::t('app', 'Shipping address is required for this form.')]],
]);
并在输出DynamicModel字段时使用标签:
echo $form->field($model, 'name')->textInput()->label(Yii::t('app', 'Name'));
echo $form->field($model, 'name')->textInput()->label(Yii::t('app', 'Shipping address'));
我想扩展组件,如下所示:
class DynamicModel extends \yii\base\DynamicModel {
protected $_labels;
public function setAttributeLabels($labels){
$this->_labels = $labels;
}
public function getAttributeLabel($name){
return $this->_labels[$name] ?? $name;
}
}
使用它:
$attributes = ['name'=>'John','email'=>'john@mailinator.com'];
$model = new DynamicModel($attributes);
$model->setAttributeLabels(['name'=>'Name','email'=>'E-mail']);
$model->validate();
嗯,看起来这是不可能的,因为
attributeLabels()
只是一个getter,而不是setter。GitHub上出现了一个(已关闭)问题,要求提供这样的功能;评论建议实现您自己的MyDynamicModel
类,该类允许设置属性标签。OP不是这样问的。
$attributes = ['name'=>'John','email'=>'john@mailinator.com'];
$model = new DynamicModel($attributes);
$model->setAttributeLabels(['name'=>'Name','email'=>'E-mail']);
$model->validate();