【问题标题】:Twig form with dynamic name具有动态名称的 Twig 表单
【发布时间】:2016-12-27 08:29:39
【问题描述】:

我正在尝试使用 Symfony 和 Twig 随机打印相同的表格,但我似乎无法弄清楚。

到目前为止,我想出的是在控制器中创建 X 数量的表单......

foreach ($participations as $e) {
        $id = $e->getId();
        $formName = "form_doc_".$id;
        ${$formName} = $this->createForm(DocumentType::class, $documentation);
        $viewVar[$formName] = ${$formName}->createView();
    }

在 TWIG 中,我从上面分别将字符串变量设置为 $formName 并使用此变量设置表单属性。

{% set formName = "form_doc_" ~ participation.id %}
{% set subForm = attribute(form, formName) %}
{{ form_start(subForm) }}
{{ form_widget(subForm.path) }}
{{ form_end(subForm) }}

当我尝试打印表单时,我收到一条错误消息。

“属性“form_doc_40”和方法“form_doc_40()”、“getform_doc_40()”/“isform_doc_40()”或“__call()”都不存在,并且在“Symfony\Component\”类中具有公共访问权限Form\FormView”在 admin/volunteerParticipations.html.twig 第 97 行”

希望有人可以帮助我;)谢谢

【问题讨论】:

  • 需要使用命名表单吗?我的意思是,有什么特别的理由不简单地使用表格数组吗?我不是特别喜欢 varvars
  • 我尝试添加表单数组,但它给出了一条错误消息,提示我无法将表单放入数组中。但如果可能的话,数组也可以正常工作
  • 感谢 ccKep。阵列最终工作! :)

标签: php forms symfony twig


【解决方案1】:

您或许可以尝试使用如下形式的数组:

控制器:

/**
 * @Route("/example", name="example_action")
 * @Template("example.html.twig")
 */
public function exampleAction(Request $request)
{
    $forms = array();
    $views = array();
    foreach ($participations as $e) {
        $form = $this->createForm(DocumentType::class, $documentation);
        $forms[] = $form;
        $views[] = $form->createView();
    }

    foreach ($forms as $form)
    {
        $form->handleRequest($request);

        if (!$form->isSubmitted()) continue;

        if ($form->isValid())
        {
            // Normal form stuff, eg. persisting
        }
    }

    // return views to twig template
    return array("forms" => $views);
}

查看:

{%- for form in forms -%}
    {{ form_start(form) }}
    {{ form_widget(form.path) }}
    {{ form_end(form) }}
{%- endfor -%}

【讨论】:

  • 是的。最后,数组更容易。我试图在表单数组而不是每个键上创建视图。 ;)
猜你喜欢
  • 2014-11-25
  • 2021-10-27
  • 2015-01-21
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多