Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony kernel.controller事件中,ControllerEvent::getController()的返回类型是什么?_Php_Symfony - Fatal编程技术网

Php 在Symfony kernel.controller事件中,ControllerEvent::getController()的返回类型是什么?

Php 在Symfony kernel.controller事件中,ControllerEvent::getController()的返回类型是什么?,php,symfony,Php,Symfony,在Symfony 5.3中,我有一个EventSubscriber到KernelEvents::CONTROLLER事件 类PrivateAPIEventSubscriber实现EventSubscriberInterface { 公共静态函数getSubscribedEvents():数组 { 返回[ KernelEvents::CONTROLLER=>['onKernelController',2], ]; } 内核控制器上的公共函数(ControllerEvent$事件):无效 { $co

在Symfony 5.3中,我有一个
EventSubscriber
KernelEvents::CONTROLLER
事件

类PrivateAPIEventSubscriber实现EventSubscriberInterface
{
公共静态函数getSubscribedEvents():数组
{
返回[
KernelEvents::CONTROLLER=>['onKernelController',2],
];
}
内核控制器上的公共函数(ControllerEvent$事件):无效
{
$controller=$event->getController();
dd(主计长);
我遇到的问题是,对于大多数请求,
getController()
方法返回如下数组:

PrivateAPIEventSubscriber.php on line 42:
array:2 [▼
  0 => App\Controller\CP\SecurityController {#241 ▶}
  1 => "login"
]
第0个元素是
$controller
对象,第1个元素是函数

但对于错误页面(例如,无路线)

我找不到此方法的文档,源代码没有帮助(未键入
ConrtrollerEvent
中的
$controller
变量),我担心可能还有一些我没有处理的情况(如返回较大数组或多维数组)

那么,所有预期的回报类型是什么呢?

这是你的朋友:

public function getController(): callable
{
        return $this->controller;
}
它是类型暗示的,因此很明显,它返回一个
可调用的
。您可以调用它。它不返回“不同的返回类型”,而是一个可以有多个形状的返回类型,只要它是有效的
可调用的


要查看数据类型的详细信息,您可以始终检查。

它返回一个可调用的
,因此它可以是可调用的、闭包、可调用的类,甚至是字符串。如果您仍然对差异感到疑惑,在第一种情况下,您有一个控制器实例以及要调用的方法的名称。在第二种情况下,您可以使用只保存实例,因为ErrorController有一个_invoke方法,如果未指定任何方法,该方法将自动调用。如前所述,这两个方法都是可调用的示例。
public function getController(): callable
{
        return $this->controller;
}