1

我对 Symfony2 很陌生,我只是想知道这样做的首选方式是什么。

我有很多涉及接收表单数据和处理它的管理操作。自然,当处理完成时,控制器动作会发送return $this->redirect($this->generateUrl('.....'));.

现在,由于我已经制作了一个通过 ajax 提交表单的 JavaScript,如果浏览器支持它,我需要修改我的控制器操作以返回Response包含的对象,json array但前提是请求是通过 ajax 发送的。

  1. 是否可以识别发送到控制器的请求是否是 AJAX 请求?

  2. 目录树中的哪个位置是放置类的首选位置,该类ResponseHandler将根据请求类型进行重定向或返回 json 数组?我意识到 Symfony2 对这些事情非常严格,所以我想从一开始就做好。也许其中甚至已经捆绑了解决方案?

更新

我发现我可以在控制器中使用 $this->getRequest->isXmlHttpRequest() 。

问题 2 仍然有效。

4

1 回答 1

0

目录树中的哪个位置是放置名为 ResponseHandler 的类的首选位置,它将根据请求类型进行重定向或返回 json 数组?

如果您执行 AJAX 请求,则将数据存储在参数、POST 或 GET 参数中。您可以通过以下方式在控制器中访问此参数:

// ...
public function finishAction()
{
    // if you use a GET request
    $data = $this->getRequest->query->get('my-get-parameter');
    // and if you use a POST request
    $data = $this->getRequest->request->get('my-get-parameter');

    // ... do something with the data
}

但是要回答您的问题:
symfony 核心框架使用 Event Dispatcher 组件来触发和附加事件。这些事件在 Symfony 代码中随处触发。您可以将一个类附加到一个事件,当该事件被触发时,您可以更改它。这样,您可以修改Response对象。

代码中抛出的事件可以*Events在该组件的类中找到。在这种情况下,我们想要REQUEST事件。在文档中阅读有关事件调度​​程序以及如何附加事件的更多信息:事件调度程序组件Symfony2 框架特定文档

我意识到 Symfony2 对这些事情非常严格

Symfony 对您的目录结构并不严格。它提供具有推荐结构的默认标准版,但您可以更改它以使其成为您的。如果一个类是用 PSR-0 标准编写的,symfony 会加载你需要的所有类。

于 2012-12-15T22:18:50.727 回答