Symfony 2:在控制器中返回一个表单

Posted

技术标签:

【中文标题】Symfony 2:在控制器中返回一个表单【英文标题】:Symfony 2: Return a form in controller 【发布时间】:2013-11-08 18:39:03 【问题描述】:

是否可以通过控制器返回表单,如下所示:

    $form = $this->createForm(new TfQuestionType(),$TfQuestion);
    return new Response($form->createView());

我想通过 Ajax 检索它,我知道您应该返回表单的 html 字符串,但在我的情况下我不能这样做。

谢谢,

大卫。

【问题讨论】:

【参考方案1】:

您可以通过使用renderView 渲染模板并将其作为响应返回来实现此目的。在这里查看文档:

http://symfony.com/doc/current/book/controller.html#rendering-templates

编辑

在您的控制器中:

$form = $this->createForm(new TfQuestionType(), $TfQuestion);

return $this->render(
    'FooBundle:Bar:form.html.twig',
    array('form' => $form)
);

您的form.html.twig 可能如下所示:

<form method="post" action=" path('some_route')">
     form_widget(form) 
    <input type="submit">
</form>

希望这会有所帮助:)

【讨论】:

您好 Darragh,您的解决方案不会完全改变我的页面吗?我想通过像Here 这样的jQuery 动态地“包含”一个表单。我目前正在研究 jQuery ^^ 嗨金吉。根据您的帖子,我的理解是您希望从浏览器向呈现表单并返回 HTML 响应的服务器进行 AJAX 调用。我假设您将使用 javascript 将其插入到页面中?如果是这样,那么您将在其自己的方法中添加上述代码,例如 QuestionController::ajaxFormAction() 并从浏览器调用该方法。如果我遗漏了什么,请告诉我,我可以修改我的答案。 你说得对,达拉赫。我最初的问题是,如果我在“问题”控制器中创建一个方法,我是否需要返回一个“响应”实例。我可能错了,但我认为 Response 只接受字符串作为参数。有了你的回答和this,我发现我不一定需要在 Symfony 中将 Response() 与 Ajax 一起使用(我在网上看到的大部分内容都返回了一个字符串来创建新的表单输入)。非常感谢您对 Darragh 的帮助。当它工作时我会回复你^^ 终于回家实现了,效果很好。非常感谢!

以上是关于Symfony 2:在控制器中返回一个表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony 2 中获取当前路线?

Symfony 2 在使用没有类的表单时添加 CSRF 令牌

如何在 Symfony2 控制器中获取表单值

Symfony 集合表单控制器问题

向 Symfony 2 表单元素添加错误

Symfony |如何从控制器中的存储库访问自定义方法?