繁体   English   中英

如何在 Symfony54 php81 应用程序中将 env VARS 注入抽象 class

[英]How to inject env VARS into abstract class in a Symfony54 php81 app

我最近着手升级一个旧的 Symfony 4.4 应用程序(到 5.4 和 PHP 8.1)并且一直在关注 symfonycasts.com 上的精彩教程。 我已经到了我不明白如何前进的地步。

class One extends AbstractClassTwo {}

abstract class AbstractClassTwo extends AbstractClassThree {
    public function __construct(array $arr = []){
    parent::__construct(); 
    $this->arr = $arr; 
    }
}

abstract class AbstractClassThree {

    public function __construct(protected string $injectedVar) {} 
    public function doSomething() { 
        echo $this->injectedVar; 
    }
}

服务.yaml:


_defaults: autowire: true autoconfigure: true bind: 'string $injectedVar': '%env(TO_INJECT)%'

.env.本地:

TO_INJECT=astringgoeshere

当我尝试执行代码时,我得到:未捕获错误:太少 arguments 到 function App\AbstractClassThree::__construct(),0 在第 35 行传入 /src/AbstractClassTwo 并且正好是 1expected。

我真的不确定为什么这不起作用。 非常感谢任何帮助!

所以我似乎能够解决这个问题的唯一方法是将参数注入子 class 以及从而成为:

abstract class AbstractClassTwo extends AbstractClassThree {
    public function __construct(protected string $injectedVar, array $arr = []){
    parent::__construct($injectedVar); 
    $this->arr = $arr; 
    }
}

Symfony 文档本身就是 state:

这些优点确实意味着构造函数注入不适合与可选依赖项一起使用。 它也更难与 class 层次结构结合使用:如果 class 使用构造函数注入,那么扩展它并覆盖构造函数就会出现问题。

强调我的,这可以在以下链接上方找到: https://symfony.com/doc/current/service_container/injection_types.html#immutable-setter-injection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM