У Вас данные размеров хранятся не очень удобно.
Пока можно сделать вот так.
// Ваш статический метод в модели SizeOneHelper
public static function getSizeList(): array
{
return [
'S (55/56)',
'M (57/58)',
'L (59/60)',
'XL (61/62)',
];
}
// если в $model->size данные хранятся в виде строки, то надо привести к массиву и передать в checkboxList()
$select = explode(',', $model->size);
echo $form->field($model, 'size')->checkboxList(SizeOneHelper::getSizeList(),[
'item' => function($index, $label, $name, $checked, $value) use ($select){
if(in_array($index, $select)){
$checked = 'checked';
}
return Html::checkbox($name, $checked);
}
])
Но я бы не хранил это в виде строки. Скорей всего создал бы отдельную связующую таблицу, где хранил бы размеры и id товара.
p.s. Сделал "на коленке", но если подумать, то можно и это улучшить.
p.s.s. Для того чтобы выводился label checkbox в функцию передаётся нужный параметр в переменной $label. Используйте его и будет выводится название checkbox-a.
return Html::checkbox($name, $checked, ['label' => $label]);
p.s.s.s. В DetailVeiw можно вывести нужные данные таким образом
// метод в модели SizeOneHelper
public function getSizeName()
{
return ArrayHelper::filter(self::getSizeList(), explode(',',$this->size));
}
// в DetailView получаем строку по названиям размеров
echo DetailView::widget([
'model' => $model,
'attributes' => [
[
'attribute' => 'size',
'value' => function($model){
return implode(',',$model->getSizeName());
}
]
]
]);
p.s.s.s.s. Создайте дополнительный метод в модели SizeOneHelper
public function getSelectSizeList()
{
return explode(',',$this->size);
}
Метод getSizeName изменится на такой
// метод в модели SizeOneHelper
public function getSizeName()
{
return ArrayHelper::filter(self::getSizeList(), $this->getSelectSizeList());
}
Тогда вывод размеров может быть таким:
// в checkboxList
echo $form->field($model, 'size')->checkboxList(SizeOneHelper::getSizeList(),[
'item' => function($index, $label, $name, $checked, $value) use ($model){
if(in_array($index, $model->getSelectSizeList())){
$checked = 'checked';
}
return Html::checkbox($name, $checked, ['label' => $label, 'value' => $value]);
}
])