在只读文本框中显示Yii2显示名称而不是id

时间:2018-03-21 07:50:46

标签: php jquery yii2 yii2-advanced-app

我的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而不是他们的名字。

enter image description here

我有两个问题

  1. 如何显示用户名而不是id
  2. 如何将文本框设为只读?正如我已经尝试->textInput(\app\models\User::toArrayList(),['readonly'=>'readonly'])
  3. 但它说

      

    方法调用使用2个参数,但签名使用1个参数

    任何帮助都将受到高度赞赏。

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

  • >

希望它可以帮助你