从Symphony 4获取项目目录

时间:2018-11-01 20:39:06

标签: symfony4

我需要的是项目目录或symfony中的公共目录。

use App\Kernel;

class FileReader
{
    public function __construct(
       Kernel $kernel
    )
    {
        var_dump ($kernel->getProjectDir());

    }
}

问题是我无法将内核注入我的班级。

this帖子中,我有几件奇怪的事情。

首先,我收到此错误:

  

无法自动装配服务“ App \ Utils \ Lotto \ FileReader”:方法“ __construct()”的参数“ $ kernel”引用类“ App \ Kernel”,但不存在此类服务。尝试将类型提示更改为其父项之一:接口“ Symfony \ Component \ HttpKernel \ HttpKernelInterface”,或接口“ Symfony \ Component \ HttpKernel \ KernelInterface”。

第二,我没有来自PHPStorm自动完成功能的KernelInterface,这些接口仅用于HttpKernelInterface,而没有getProjectDirectory方法。

如何读出/var/www/myproject/var/www/myproject/public/

1 个答案:

答案 0 :(得分:1)

您不应注入内核,而应仅注入所需的内容。在这种情况下,它是项目目录,可通过您的服务定义在 config / services.yaml 中使用参数%kernel.project_dir%

services:
    App\Utils\Lotto\FileReader:
        arguments:
            $projectDirectory: "%kernel.project_dir%"

然后调整您的类构造函数:

public function __construct(string $projectDirectory) {
    $this->directory = $projectDirectory;
}

作为奖励,您可以通过定义全局“绑定”参数使该目录对所有服务自动可用:

services:
    _defaults:
        bind:
            $projectDirectory: "%kernel.project_dir%"

有了该定义,每个Service都可以在其__construct()中使用变量$ projectDirectory,而无需显式定义它。