Symfony2-获取捆绑包中所有控制器的方法?

Symfony2-获取捆绑包中所有控制器的方法?,symfony,controllers,Symfony,Controllers,有没有办法获取捆绑包中的所有控制器(和类)?包括所有家长控制器 Thank的实现这一点最现实的方法是获取路线的端点 控制器没有文档所示的必需结构。操作方法不需要在名称中加后缀action。之所以以这种方式记录它,是因为许多人在他们的路由yml中使用catch-all配置,需要后缀来猜测端点 打印路线时: print_r($this->container->get('router')->getRouteCollection()->all()); 您将看到针对每个路由使用的

有没有办法获取捆绑包中的所有控制器(和类)?包括所有家长控制器


Thank的

实现这一点最现实的方法是获取路线的端点

控制器没有文档所示的必需结构。操作方法不需要在名称中加后缀
action
。之所以以这种方式记录它,是因为许多人在他们的路由yml中使用catch-all配置,需要后缀来猜测端点

打印路线时:

print_r($this->container->get('router')->getRouteCollection()->all());
您将看到针对每个路由使用的控制器方法。 这些路由在技术上不属于任何包,因为您可以将路由指向任何类的任何方法

但是,您可以使用列表和一些字符串魔术来根据名称空间告诉bundle


请记住,
\u控制器
类似于
web\u profiler.controller.profiler:infoAction
意味着该方法属于通过依赖项注入实例化的服务。

最现实的方法是获取路由的端点

控制器没有文档所示的必需结构。操作方法不需要在名称中加后缀
action
。之所以以这种方式记录它,是因为许多人在他们的路由yml中使用catch-all配置,需要后缀来猜测端点

打印路线时:

print_r($this->container->get('router')->getRouteCollection()->all());
您将看到针对每个路由使用的控制器方法。 这些路由在技术上不属于任何包,因为您可以将路由指向任何类的任何方法

但是,您可以使用列表和一些字符串魔术来根据名称空间告诉bundle


请记住,
\u控制器
web\u profiler.controller.profiler:infoAction
意味着该方法属于通过依赖项注入实例化的服务。

尽管没有官方方法获取控制器,但您可以使用以下代码获取所有控制器:

$bundles = $this->container->getParameter('kernel.bundles');
$controllers = [];
foreach ($bundles as $bundle) {
    $reflection = new \ReflectionClass($bundle);
    $controllerDirectory = dirname($reflection->getFileName()) . '/Controller';
    if (file_exists($controllerDirectory)) {
        $d = dir($controllerDirectory);
        while (false !== ($entry = $d->read())) {

            if (preg_match("/^([A-Z0-9-_]+Controller).php/i", $entry, $matches)) {                        
                $controllers[] = ['fileName' => $controllerDirectory. '/'. $entry, 'class' => $reflection->getNamespaceName() . '\Controller\\' . $matches[1]];
            }
        }
        $d->close();
    }
}
print_r($controllers);

尽管没有官方方法获取控制器,但您可以使用以下代码获取所有控制器:

$bundles = $this->container->getParameter('kernel.bundles');
$controllers = [];
foreach ($bundles as $bundle) {
    $reflection = new \ReflectionClass($bundle);
    $controllerDirectory = dirname($reflection->getFileName()) . '/Controller';
    if (file_exists($controllerDirectory)) {
        $d = dir($controllerDirectory);
        while (false !== ($entry = $d->read())) {

            if (preg_match("/^([A-Z0-9-_]+Controller).php/i", $entry, $matches)) {                        
                $controllers[] = ['fileName' => $controllerDirectory. '/'. $entry, 'class' => $reflection->getNamespaceName() . '\Controller\\' . $matches[1]];
            }
        }
        $d->close();
    }
}
print_r($controllers);

. 当做我找到了一个解决办法。。。很久以前;)。当做我找到了一个解决办法。。。很久以前;)