我的create form
中有两个文本框。两者都有用户ID。现在我想显示用户的username
。
我有一个表单,我在其中选择imsi
个号码。选择它之后,将显示向其发出sim
并向其返回SIM卡的用户。以下是我的代码
查看
<?= $form->field($model, 'imsi')->hiddenInput()->label(false)?>
<?= $form->field($model, 'return_by')->textInput(\app\models\User::toArrayList()) ?>
<?= $form->field($model, 'return_to')->textInput(\app\models\User::toArrayList()) ?>
<?= $form->field($model, 'return_reason')->dropDownList(\common\models\SimReturn::simreturnReason()) ?>
JQuery的
jQuery('#the-sim-id').on('typeahead:selected', function (e, datum) {
var html = '<div class="selected-imsi"><input type="hidden" name="selected_imsi[]" value="'+datum.id+'" />'+datum.imsi+'<a onclick="$(this).closest(\'.selected-imsi\').remove()">X</a></div>';
//alert(datum.sim_id);
$('#selected_imsi_container').append(html);
$('#simreturn-imsi').append(datum.imsi);
$('#the-sim-id').typeahead('val','');
$('#simreturn-return_by').val(datum.issued_to);
$('#simreturn-return_to').val(datum.created_by);
});
函数toArrayList()
位于
public static function toArrayList(){
if(Yii::$app->user->identity->user_role==Roles::ROLE_TEAM_LEAD && Yii::$app->user->identity->group_id != ''){
return ArrayHelper::map(User::find()
->where(['group_id'=>Yii::$app->user->identity->group_id])
->andWhere('id!='. Yii::$app->user->id)
->andWhere('user_role!=2')
->andWhere('user_role=4')
->orWhere('user_role=3')
->all(), 'id', function ($model,$defaultValue){
return $model['username'].' - '.Roles::idToName($model['user_role']);
});
}
else if(Yii::$app->user->identity->user_role==Roles::ROLE_SIM_MANAGER)
{
return ArrayHelper::map(User::find()
//->where(['group_id'=>Yii::$app->user->identity->group_id])
->andWhere('id!='. Yii::$app->user->id)
->andWhere('user_role!=2')
->andWhere('user_role=7')
->orWhere('user_role=8')
->orWhere('user_role=6')
->all(),'id',function ($model,$defaultValue){
return $model['username'].' - '.Roles::idToName($model['user_role']);
});
}
else if(Yii::$app->user->identity->user_role ==Roles::ROLE_PRODUCTION_MANAGER)
{
return ArrayHelper::map(User::find()
->andWhere('id!='.Yii::$app->user->id)
->andWhere('user_role!=2')
->andWhere('user_role!=3')
->andWhere('user_role!=4')
->andWhere('user_role!=5')
->andWhere('user_role!=6')
->andWhere('user_role!=1')
->andWhere('user_role!=8')
->orWhere('user_role=7')
->all(),'id',function ($model,$defaultValue){
return $model['username'].' - '.Roles::idToName($model['user_role']);
});
}
return ArrayHelper::map(User::find()->where(['user_type'=>'user'])->andWhere('user_role!=2')->all(),'id',function ($model,$defaultValue){
return $model['username'].' - '.Roles::idToName($model['user_role']);
});
}
上面的函数给出了username-role_name
现在当我打开表单并选择一个imsi
号码时,在文本框中我只会看到用户的ID而不是他们的名字。
我有两个问题
->textInput(\app\models\User::toArrayList(),['readonly'=>'readonly'])
但它说
方法调用使用2个参数,但签名使用1个参数
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
关于Arrayhelper::map()
:从多维数组或对象数组构建映射(键值对)。$from
和$to
参数指定{{1用于设置地图的名称或key
名称。可选地,可以根据分组字段property
进一步对地图进行分组。
所以你看到你传递的第二个参数是回调
$group
返回 function ($model,$defaultValue){
return $model['username'].' - '.Roles::idToName($model['user_role']);
}
,map函数尝试从数组中获取列名$model['username'].' - '.Roles::idToName($model['user_role']);
,这显然不是任何列名,因此首先将其更改为a有效的列名称,但您希望将标签显示为username-roll_name
,而不是在username-rollname
中为keyname
提供回调,您应该使用ArrayHelper
中的CONCAT
选择列作为别名SQL
然后为map()
函数第二个参数提供该别名,以将标签显示为username-roll_name
。
第二个问题很明显,您将第二个参数传递给textInput()
,而不是$options
,根据docs
此方法将生成名称和值标记属性自动为模型属性,除非它们在inputOptions
中明确指定。
您可以使用field()
['readonly'=>'readonly']
中的field
选项,$form->field($model, 'return_by',['inputOptions'=>['readonly'=>'readonly']])->textInput(\app\models\User::toArrayList())
Startup
希望它可以帮助你