如何从控制器内部获取Symfony2中Web目录的服务器路径?

2022-08-30 09:09:25

问题如下:

如何从控制器内部(或出于此原因从其他任何地方)获取Symfony2中Web目录的服务器路径

我已经找到了什么(也通过搜索这里):

建议在有关教义文件处理的说明书文章中使用

$path = __DIR__ . '/../../../../web';

通过四处搜索找到,只能从控制器内部(或注入内核的服务)中使用:

$path = $this->get('kernel')->getRootDir() . '/../web';

那么,是不是绝对没有办法至少获得“网络”部分呢?例如,如果我决定重命名它或移动或其他东西怎么办?

在第一个symfony中,一切都很容易,当我可以通过调用静态sfConfig::get()方法从代码中的任何位置获得所需的一切时。


答案 1

实际上,在Symfony2中没有直接的方法来获取webdir的路径,因为该框架完全独立于webdir。

您可以在内核类的实例上使用,就像您编写一样。如果您考虑将来重命名dir,则应使其可配置。例如,AsseticBundle在其DI配置中有这样的选项(请参阅此处此处)。getRootDir()/web


答案 2

要从控制器外部访问根目录,您只需在服务配置中注入参数即可。%kernel.root_dir%

service_name:
    class: Namespace\Bundle\etc
    arguments: ['%kernel.root_dir%']

然后,您可以在类构造函数中获取 Web 根目录:

public function __construct($rootDir)
{
    $this->webRoot = realpath($rootDir . '/../web');
}

推荐