Symfony2对请求(master和sub)的印象是错误的,还是我弄错了


Does Symfony2 give wrong impression for requests (master and sub) or I get it wrong

当用户点击网络表单中的提交按钮(例如,将数据插入数据库)时,事件侦听器将其视为MasterPOST请求,这是可以的。成功提交(数据插入数据库)后,我们在控制器中编写的逻辑return $this->redirect($this->generateUrl('home'));将用户重定向到成功或失败页面,这也被视为MasterGET请求。是不是因为用户不是直接导致的,所以不应该是SubGET请求?

要么我把所有的东西都弄错了,要么这里的答案(Symfony2中的MASTER/SUB REQUEST有什么区别?)是短/错的。

医生来了。

我之所以这么问,是因为我想避免在发生redirect时分配系统资源。

服务

services:
    kernel.listener.kernel_request:
        class: Site'MainBundle'EventListener'Request'KernelRequest
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

事件LISTENER类

<?php
namespace Site'MainBundle'EventListener'Request;
use Symfony'Component'HttpKernel'Event'GetResponseEvent;
class KernelRequest
{
    public function onKernelRequest(GetResponseEvent $event)
    {
        if ($event->isMasterRequest() === true) {
            // Do something with Master request
        } else {
            // Do something with sub request
        }
    }
} 

控制器

publich function saveAction()
{
    // Insert user's POST stuff into database
    // Then either redirect to success or fail page like;
    return $this->redirect($this->generateUrl('success-or-fail-page'));
}

Redirect默认返回302状态的重定向响应,仅此而已。Finito。内核关闭。

然后,用户的浏览器被重定向到你的success-or-fail-page,你会收到另一个常规的主请求,就像用户直接进入该页面一样。

如果你真的想发布一个子请求,你应该这样做:

publich function saveAction()
{
    return $this->forward('YourBundle:YourController:action', ['params' => 'here']);
}