如何获得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/项目的根。