【发布时间】:2018-10-13 17:59:47
【问题描述】:
Symfony v3.4 在使用自动连线功能时无法猜测参数。
无法自动装配服务“AppBundle\Service\MyServiceConfig”:方法“__construct()”的参数“$key”没有类型提示,您应该明确配置其值。
我也明确定义了参数,但它仍然不起作用,参数类型为string,长度为 136 个字符。
services:
app.myservice.config:
class: AppBundle\Service\MyServiceConfig
public: true
arguments: ["%app_key%"] #defined in parameter.yml
app.myservice
class: AppBundle\Service\MyService
public: true
arguments: ["@app.myservice.config"]
效果非常好,当我调用服务时,我可以看到预期的结果。
但是,当我编写 AppExtension 时,出现上述错误:
app.twig.my_app_extension:
class: AppBundle\Twig\MyAppExtension
arguments: [ "@app.myservice" ]
tags:
- { name: twig.extension }
所以我明确定义了参数
app.myservice.config:
class: AppBundle\Service\MyServiceConfig
public: true
arguments:
$key: "%app_key%" #defined in parameter.yml
还是不行
这是 MyServiceConfig 类的样子:
class MyServiceConfig implements MyServiceConfigInterface {
/**
* @var string
*/
private $key;
public function __construct($key){
$this->key= $key;
}
}
MyAppExtension 类:
/**
* The MyAppExtension class
*/
class MyAppExtension extends \Twig_Extension
{
/**
* @var MyServiceConfigInterface $key
*/
private $key;
public function __construct(MyServiceConfigInterface $key){
$this->key= $key;
}
}
here 提供的解决方案也没有帮助,因为我在app/config/services.yml 中有我的 service.yml
【问题讨论】:
-
使用 AppBundle\Twig\MyAppExtension 代替 app.twig.my_app_extension 作为服务 ID。我认为正在发生的事情是 autowire 的自动服务检测正在拿起你的课程并尝试自动装配它。
-
如果你尝试怎么办:
public function __construct(string $key)? -
@Cerad 和 Sylvain Attoumani 我尝试了这两个建议,但它不起作用。但是我创建了一个简单的应用程序来复制错误。 link to the project
-
想想吧。 Autowire 是关于类和类名的。它不知道如何处理 app.myservice.config 和 app.myservice 很好地将您的问题减少到单个 repo。现在创建另一个新项目并按照文档中的示例进行操作。