gpt4 book ai didi

Symfony 4,如何从服务类中正确获取根路径目录(或/src 路径)? (错误 : 'Call to a member function get() on null' )

转载 作者:行者123 更新时间:2023-12-05 08:31:53 27 4
gpt4 key购买 nike

在 Symfony 4 中,我可以从 Controller 获取项目的根路径:

// From a Controller Class, in the src/Controller dir

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// ...
Class myController extends Controller{
// ...
// in a public method
$rootDir = $this->get('kernel')->getRootDir();

但是我怎样才能从服务类中获取根路径呢?我试过这种(丑陋的)方式

// From a Service Class, in the src/Service dir

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// ...
Class myService extends Controller{
// ...
// in a public method
$rootDir = $this->get('kernel')->getRootDir();

但是当我这样做时,我得到了错误:

"Call to a member function get() on null"

为什么这个解决方案不起作用?

最佳答案

Symfony 提供了一个参数 kernel.project_dir 可以在服务容器内使用,您可以将其注入(inject)服务或从容器中获取(在 Controller 内):

$this->getParameter('kernel.project_dir');

在服务中,您只需将其注入(inject)构造函数:

class MyService
{
private $projectDir;

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

在您的配置中,您可能必须确保正确传递字符串,或者直接为此特定服务设置它:

# config/services.yaml

...

services:

...

App\MyService:
arguments:
$projectDir: '%kernel.project_dir%'

或者,您可以将此参数绑定(bind)到变量名,以便配置自动识别它:

# config/services.yaml

...

services:
_defaults:
...
bind:
$projectDir: '%kernel.project_dir%'

然后所有具有参数 $projectDir 的服务(在该配置文件中注册)将从该参数获取值。

关于Symfony 4,如何从服务类中正确获取根路径目录(或/src 路径)? (错误 : 'Call to a member function get() on null' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com