Symfony2 根据 url 更改表单标签

Symfony2 change form labels based on url

我有一个表单的多个版本。表格有所有相同的问题,但表格的标签因填写表格的人而异(第一人与第三人)。

有没有人对如何实现这一目标有任何想法。我知道我可以创建一组不同的模板,但是表单相当大,动态更改它会很好。

我问是因为我发现Symfony的工具包很大,我怕我忽略了什么。截至目前,我认为唯一可行的方法是使用 Event Listener

感谢任何帮助!

您有 2 个选择:

  1. 使用 Symfony Forms 创建 2 种形式 classes,并在你的控制器中,将适当的形式 class 设置为一个 twig 变量,然后在你的模板中呈现

```

{{ form_start(form) }}
    {{ form_errors(form) }}
    {{ form_row(form.field1) }}
    {{ form_row(form.field2) }}
{{ form_end(form) }}

```

这样做可以让您定义根据查看者显示的表单。然后,您可以在服务配置中定义从控制器调用的方法,以便在调用控制器操作之前设置此 class。

您似乎严格地谈论了表示层。我会调查为此使用翻译。在您的控制器中拥有多种形式 类 或一堆逻辑将令人沮丧。你提到了第一人称和第三人称。您如何确定用户是否属于这些组之一?也许您为翻译组件创建了一个包装器服务,它会检查您的要求并相应地进行委托。好像你所做的一切都是在说另一种语言。

你的主要问题是确定谁是第一人称,谁是第三人称。这在整个 session 期间会发生变化吗?如果在您的身份验证过程中不这样做(安全选民可以为确定工作)or/and 如果它确实发生变化,则将其存储在 session 中。覆盖翻译服务以使用您的包装器来决定要使用的翻译。

我绝不是说这很容易,但我认为使用翻译组件、身份验证作为主管和服务容器,您可以获得您想要的东西,而不会混淆您的代码库。