【问题标题】:Symfony 2 form in embedded controller and AJAX嵌入式控制器和 AJAX 中的 Symfony 2 形式
【发布时间】:2011-11-11 11:46:23
【问题描述】:

在 symfony 2 中,可以在模板中嵌入控制器。例如,我可能有一个博客文章模板,但我也可以将控制器嵌入到模板侧栏中的投票或热门文章列表中。

我有兴趣嵌入一个提供投票的控制器。为此,我创建了一个控制器:

public function poll(Request $request)
{
    $task = new Poll();

    $form = $this->createFormBuilder($task)
        ->add('radio', 'one')
        ->add('radio', 'two')
        ->add('radio', 'three')
        ->getForm();

    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            //save and show how many people voted for each option
        }
    }

    return $this->render('PollBundle:Default:new.html.twig', array(
            'form' => $form->createView(),
        ));

}

然后我可以将其作为侧栏项嵌入到我的模板中:

<div id="sidebar">
    {% render "PollBundle:Poll:poll" %}
</div>

现在的问题是: 如果我将表单操作设置为"",那么如果提交了轮询,请求将通过嵌入轮询控制器的主控制器。然后我可以使用隐藏字段来检查是否使用投票表单提交了投票,然后更新数据库并呈现结果。然后返回到主控制器的模板,一切都很好。

我现在想使用一些 AJAX 来为启用了 javascript 的人简化表单提交。我该怎么做呢?由于表单操作设置为"",请求将通过主控制器,呈现模板,然后调用轮询控制器。但我只想返回一个 AJAX 响应,其中包含为每个项目投票的结果。无论如何,必须通过主控制器来使用 AJAX 请求填充民意调查似乎也很浪费。

我该怎么做呢?

【问题讨论】:

    标签: ajax forms symfony


    【解决方案1】:

    您可以将表单指向它自己的处理帖子的操作,如果它是通过 ajax 请求的,则返回结果,或者,如果它是通过正常请求到达的,则重定向到 HTTP_REFERER ($this-&gt;get('request')-&gt;server-&gt;get('HTTP_REFERER'))。

    如果您不想依赖引用者,您还可以在呈现投票时将当前 URI 存储在会话变量中(在上面描述的 pollAction 中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2017-06-27
      • 1970-01-01
      相关资源
      最近更新 更多