【问题标题】:symfony choice type should accept array of modelssymfony 选择类型应该接受模型数组
【发布时间】:2015-07-27 12:07:30
【问题描述】:

我找不到将“模型”数组传递给选择类型的正确方法。它需要“规范”数据,但这可能是代码重复,很多情况下恕我直言。

重复模型转换器的代码

    $vehicles = $repo->findAll();

    $vehicleChoice = $builder
        ->create('vehicle', 'choice', [
            'choices' => \array_map(
                function(Vehicle $v) {
                    return $v->getId(); // same as VehicleModelTransformer::transform
                }, $vehicles),
        ])
        ->addModelTransformer(
            new VehicleModelTransformer($this->em)
        )
    ;

对比

表单应该使用模型转换器来初始化规范数据

   $vehicleChoice = $builder
        ->create('vehicle', 'choice', [
            'choices_as_model' => $repo->findAll(), // anything like that
        ])
        ->addModelTransformer(
            new VehicleModelTransformer($this->em)
        )
    ;

任何人都知道如何编写第二种方式,或者将模型数组转换为规范数据?在 symfony 组件中,modelToNorm 是一个私有方法。该代码也不可重用。

谢谢!

【问题讨论】:

  • 有趣的问题...我发现它正在寻找相反的 - 一种将 ViewData 数组提供给 EntityType 字段的方法,而不是使用 QueryBuilder 提供它。并让 EntityType 自动将所需的视图数据数组转换为所需的模型(在表单提交等上)。

标签: forms symfony


【解决方案1】:

我看到你已经有自己的 dataTransformer 了 一切为了你的目的。 所以我认为这种情况下更好的解决方案是创建自定义 像 VehicleChoice 这样的表单类型,它将扩展内置的选择类型 并将包含所需的逻辑。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • 我建议从类型创建自定义作为解决方案并将逻辑放入其中。所以我对你的评论有点困惑
  • 您的答案被标记为“太短”确实是一个真实的答案,而不是一个简单的评论。我建议您添加更多详细信息,以让用户了解“为什么”您的解决方案可能是一个好的或最好的解决方案。您提出了一种不同的方法,但您没有向用户提供有关如何实现它的更多详细信息
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2016-06-25
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多