Я работаю над Yii2. Я создаю несколько выпадающих списков с помощью настраиваемого массива, подобного этому.
В файле контроллера:
$all_groups = Groups::find()->where(['=','group_created_by',$id])->orwhere(new Expression('FIND_IN_SET(:id_to_find, group_managers)'))->addParams([':id_to_find' => $id])->all(); // fetch all values $selected_groups = Groups::find()->where(['=','group_users',$updateId])->orwhere(new Expression('FIND_IN_SET(:id_to_find, group_users)'))->addParams([':id_to_find' => $updateId])->all(); // getting selected values $all_groups_array = []; foreach ($all_groups as $group) { $all_groups_array[$group->id] = ucfirst($group->group_name); }
При отображении данных на просмотр:
return $this->render('mngr_userupdate', [ 'model' => $model, 'all_groups_array'=>$all_groups_array, 'case'=>$case, 'email_error' => 'false', 'applied_email' => '' , ]);
поэтому он создает массив следующим образом:
Array ( [11] => Mngr1 group [14] => Mngr 11 Group )
В файле vies:
<?= $form->field($model, 'group_user[]')->dropDownList($all_groups_array,['multiple' => 'multiple']) ?>
Он отлично работает для создания формы для вставки данных. но как создать массив, в котором я могу отображать выбранные значения в форме обновления.
Редактировать:
Я просто нашел, что если я использую его как
<?= $form->field($model, 'group_user[]')->dropDownList($all_groups_array,['multiple' => 'multiple', 'options'=>['14'=>["Selected"=>true],'11' => ["Selected"=>true]]]); ?>
тогда он начнет отображать значения как выбранные. т.е. я должен создать массив вроде
[ '14'=>["Selected"=>true], '11' => ["Selected"=>true] ]
Для этого я использую цикл, как показано ниже:
foreach ($selected_groups as $key => $value) { $sel_groups_array[$value] = '' // what should be there or else }
Как создать этот массив с помощью цикла?
Я создал решение своего вопроса. В случае, если у кого-то есть такая проблема, он может использовать цикл следующим образом:
foreach ($selected_groups as $group) { $sel_groups_array[$group->id] = array("selected"=>true); }
и в файле представлений вы можете использовать массив для отображения выбранных нескольких значений следующим образом:
<?= $form->field($model, 'group_user[]')->dropDownList($all_groups_array,['multiple' => 'multiple','options' => $sel_groups_array]); ?>
Поскольку структура для отображения нескольких выбранных значений в форме обновления, она должна выглядеть следующим образом:
$form->field($model, 'group_user[]')->dropDownList($all_groups_array,['multiple' => 'multiple', 'options'=>['14'=>["Selected"=>true],'11' => ["Selected"=>true]]]); // here 14 and 11 I am using as example