当用户点击网络表单中的提交按钮(例如,将数据插入数据库)时,事件侦听器将其视为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']);
}