在 Symfony 类中,正在方法 下处理项目根目录。要将其放入控制器中,您可以执行以下操作:AppKernel
getProjectDir()
$projectRoot = $this->get('kernel')->getProjectDir();
它将返回一个项目根目录。
如果你需要其中一个类中的项目根目录,你有两个选择,我将呈现给你。首先是作为依赖项传递:AppKernel
class Foo
{
/** KernelInterface $appKernel */
private $appKernel;
public function __construct(KernelInterface $appKernel)
{
$this->appKernel = $appKernel;
}
}
多亏了Symfony 4自动布线依赖项,它将被自动注入到你的类中,你可以通过执行以下操作来访问它:
$this->appKernel->getProjectDir();
但请注意:我不认为这是一个好主意,直到你有真正的需要,并且与类有关,而不是获得项目根目录。特别是如果你以后考虑为你的类创建单元测试。例如,您将通过需要创建模拟来自动增加复杂性。AppKernel
AppKernel
第二个选项和恕我直言,最好是只传递一个带有目录路径的字符串。您可以通过在内部定义一个服务来实现此目的,如下所示:config/services.yaml
services:
(...)
MyNamespace\Foo:
arguments:
- %kernel.project_dir%
并且您的构造函数将如下所示:
class Foo
{
/** string $rootPath */
private $rootPath;
public function __construct(string $rootPath)
{
$this->rootPath = $rootPath;
}
}