【问题标题】:How to render a dynamic Select (ChoiceType)?如何呈现动态选择(ChoiceType)?
【发布时间】:2020-02-08 03:19:28
【问题描述】:

所以我正在尝试为 Product Table 表单生成动态选择

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

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

我希望从另一个表 Category(id,cat_name) 生成选择。

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

我编写了这个函数,它返回表 $tab 中表 Category 中的所有值

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 页面

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

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

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

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

    【讨论】:

    • 好主意!我确实将数组作为选项传递给表单,它可以工作
    【解决方案2】:

    为什么不让 tab[] 在填充之前静态内置一个名为“choices”的字段,然后将每个 Id 和类别添加到其中并返回表格并在任何地方返回数组的结果?

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

    然后

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2022-07-08
      • 2020-06-14
      • 2011-05-04
      相关资源
      最近更新 更多