如何呈现动态 Select (ChoiceType)?

How to render a dynamic Select (ChoiceType)?

所以我正在尝试为 产品 Table 表单

生成动态 select

而不是像这样写所有的选项:(来自 productType 的代码)

->add('id_cat', ChoiceType::class, [
    'choices'  => [
        'cosmetique' =>'1',
        'vetement' => '2',
        'parfums' => '3',
    ],
])

我希望从 另一个 table Category(id,cat_name) .

生成选项

例如,它显示 cat_name 而不是“cosmetique”,而显示 id 而不是 1 (这些是从 table 类别的数据库生成的值)

我写了这个函数 return 来自 table 类别的所有值在 table $tab

public function cat (CategoryRepository $categoryRepository)
    {
        $allcat=$categoryRepository->findAll();
        $tab=[];    
        foreach($allcat as $cat) 
        {
            $tab=$cat->getId();
            $tab[$tab]=$cat->getCatname();
    
        }
        return $tab;
    }
        

我不知道我应该把它放在哪里?以及如何将 $tab 发送到 ProductType.php 页面

为什么不直接制作 tab[] 就像在填充之前静态内置一个名为 'choices' 的字段,然后将每个 I'd 和类别添加到它和 return table 和 return 数组的结果在哪里?

tab['choices']=$cat->getID();
tab['choices'][tab['choices']]=$cat->getCatname();

然后

for each ($choices as $choice)
For each ($choice as $category)
Print_r( $category)

如果你在这两个实体之间有关系(我猜你有),你可以轻松地使用 Symfony 的实体类型来避免这样的问题,它会显示类别 table 中的所有内容并提交根据您的关联选择要保存的对象:

$builder->add('category', EntityType::class, [
    'class' => Category::class,
    'choice_label' => 'cat_name',
]);

或者,如果您想保留自己的方式,可以将数组作为选项传递给表单,但这不是一个好的做法。