我需要的是项目目录或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/
?
答案 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,而无需显式定义它。