【问题标题】:How to get project directory from Symfony 4如何从 Symfony 4 获取项目目录
【发布时间】:2019-04-06 03:14:06
【问题描述】:

我需要的是 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,这些接口仅适用于没有 getProjectDirectory 方法的 HttpKernelInterface。

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

【问题讨论】:

    标签: symfony4


    【解决方案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%"
    

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

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多