Вы должны иметь возможность использовать класс формы, если ваш массив $ категорий структурирован немного иначе. В Cookbook есть пример здесь :
// HTML <option> elements with values 1 and 3 will be rendered preselected
echo $this->Form->select(
'rooms',
[1, 2, 3, 4, 5],
[
'multiple' => true,
'value' => [1, 3]
]
);
Сначала просто сопоставьте $categories
с более простым сопоставленным списком идентификаторов категорий => описаний.
Если это список категорий был данными из базы данных, просто выберите его с помощью 'list' вместо метода по умолчанию, например:
$categories = $CategoriesTable->find('list');
Но, если это не результат запроса, вы все равно можете вручную преобразовать свой массив:
$categories = [
['id' => 1, 'description' => 'Hardware'],
['id' => 2, 'description' => 'Sofware'],
['id' => 3, 'description' => 'Peopleware'],
['id' => 4, 'description' => 'Alienware'],
];
$formattedCategories = [];
foreach($categories as $row){
$formattedCategories[$row['id']] = $row['description'];
}
$categories = $formattedCategories;
В этом формате будет работать обычный Form->select
:
echo $this->Form->select(
'categories[_ids][]',
$categories,
[
'multiple' => true,
'value' => $selectedCategoriesIds
]
);