【问题标题】:Symfony2, form choice , list of choices depending of mapped entity propertySymfony2,表单选择,取决于映射实体属性的选择列表
【发布时间】:2015-06-03 08:10:17
【问题描述】:

让我们管理一下,我有一个实体RestaurantOrder,其属性为status

status 可以取这些值

  • new
  • accepted
  • being prepared
  • delivered
  • cancelled by customer
  • cancelled by kitchen

等等

现在我想要的是,当我在后端编辑一份餐厅订单时,呈现给我的status 列表取决于当前的status

我发现最简单的方法是让我的实体拥有一个方法 getPossibleStatusChange,它返回一个可能选择的数组(使用业务需求给出的复杂规则)

但我在 Symfony2 中没有找到 Choices 的选项说“从当前实体调用方法”

我已经知道如何从静态回调或调用Repository的回调中填充选项

有这样的选择吗?

【问题讨论】:

  • Afaik,没有。不过,您可以从表单中访问实体本身。 $builder->getForm()->getData() 将把实体交给你,你可以在其中访问它的方法。
  • 根据我对您的问题的理解,我认为您可以在构建表单本身以实现业务规则时更改前缀处理中的可用状态(即表单订单状态上的“filterPossibleStatus(order_status)”构建时可能的选择)。您可以在包含表单的页面上为此添加 javascript 后缀处理,以检查显示的选项是否符合您的业务规则。(在渲染树枝时不要忘记传输您的实体,以便 JS)
  • @DerStoffel,谢谢,其实我认为它可以解决我的问题,让我试试。
  • @Answers_Seeker,谢谢,但是我想保留 javascript 作为最后的解决方案,因为使用 phpunit 将其集成到我们的功能测试中更加困难。
  • @DerStoffel 你的方法很有魅力,你能回答我吗?

标签: php forms symfony


【解决方案1】:

我不知道这种可能性。

您可以在 formType 中访问底层对象:

$builder->getForm()->getData();

您可以使用您的方法进行处理,以产生您的选择。

【讨论】:

  • 是的,这实际上已经足够了,只需在您的实体中添加一个方法“getNextPossibleStatus():array”(基于 $this->status)来填充选择,然后您就完成了:),谢谢。
猜你喜欢
  • 2023-03-09
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多