如何获得Symfony2应用程序的根目录?

从控制器内部获取根应用程序目录的最佳方式是什么? 是否有可能在控制器之外?

现在我通过将它(从参数)传递给服务作为参数来获取它,如下所示:

services: sr_processor: class: Pro\Processor arguments: [%kernel.root_dir%] 

有没有更好,更简单的方法来获取Symfony2中的这些信息?

用这个:

 $this->get('kernel')->getRootDir(); 

如果你想要的Web根:

 $this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath(); 

这将从控制器的行动方法工作…

编辑:至于服务,我认为你做的方式尽可能干净,虽然我会通过完整的内核服务作为一个参数…但这也将做的伎俩… … –

除此之外,您还可以使用正则expression式:

  $directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/'; $directoryPath = preg_replace("/app..../i", "", $directoryPath); echo $directoryPath; 

如果您使用此path访问非代码项目的某些部分(例如上载目录或SQLite数据库),则最好将path转换为参数,如下所示:

 parameters: database_path: '%kernel.root_dir%/../var/sqlite3.db' 

这个参数可以被注入到任何你需要的地方,所以你不必再在代码中弄乱path。 此外,该参数可以在部署时被覆盖。 最后,每个维护程序员都会有更好的想法。

更新:修正了kernel.root_dir的不断使用。

在Symfony 3.3中可以使用

 $projectRoot = $this->get('kernel')->getProjectDir(); 

获取networking/项目的根。