【发布时间】:2012-04-12 07:53:40
【问题描述】:
我听 kernel.controller 动作来实现我的控制器的默认(或初始化)动作:
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
$currentController = $controller[0];
if($controller[0] instanceof Initmethod){
$ret = $currentController->init($event->getRequest());
if($ret !== null && $ret instanceof Response){
$ret->send();
exit();
}
}
$event->setController($controller);
}
如您所见,我想让我的 init 操作能够返回应该发送的响应,而不是被调用的操作之一。之后,不应执行任何其他操作。
我的问题是,我这样做的方式是否正确?因为不想“与框架抗争”并通过调用 exit 来结束执行似乎并不正确。
【问题讨论】:
-
我没有尝试过你的特殊情况,但我认为 $event->stopPropagation();return;应该代替您的 exit() 工作;看这个链接的底部:symfony.com/doc/current/components/event_dispatcher.html
-
在
kernel.request事件中可以使用setResponse()方法立即返回响应。
标签: php model-view-controller symfony controller