Symfony中AppKernel
类在方法getProjectDir()
下处理项目根目录。要在控制器中获取它,您可以执行以下操作:
在Symfony中,AppKernel
类的getProjectDir()
方法处理项目的根目录。要在控制器中获取它,您可以使用以下代码:
```php
$projectDir = $this->getParameter('kernel.project_dir');
```
$projectRoot = $this->get('kernel')->getProjectDir()
它将返回项目的根目录。
如果您需要在其中一个类中使用项目的根目录,您有两个选择,我将向您介绍这两种方法。第一种是将AppKernel
作为依赖项传递:
class Foo
{
private $appKernel;
public function __construct(KernelInterface $appKernel)
{
$this->appKernel = $appKernel;
}
}
由于Symfony 4自动装配依赖项,它将自动注入到您的类中,您可以通过以下方式访问它:
感谢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;
}
}