[英]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.