如何解决无法自动连线服务...尽管已配置服务参数
我在自动配置服务配置中的某些参数时遇到问题。
我不能clear:cache
,因为它会触发错误,所以我认为这不是缓存问题。
而且我已经将所有文件复制/粘贴到一个新的Symfony项目中,仍然遇到相同的问题。
这是我的服务。yaml
#config/services.yaml
parameters:
app.medipim_api_key_value: '%env(resolve:MEDIPIM_API_KEY)%'
app.medipim_api_key_id: 326
services:
[6 lines ...]
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude:
'../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
App\Services\MedipimApi:
arguments:
$medipim_api_key_id: '%app.medipim_api_key_id%'
$medipim_api_key_value: '%app.medipim_api_key_value%'
[10 lines ...]
这是我的服务:
#src/Services/MedipimApi.php
class MedipimApi
{
const FILTER_CNK_AND_ACTIVE = 'filter_cnk_and_active';
/**
* @var MedipimApiV3Client
*/
private MedipimApiV3Client $medipimApiV3Client;
private TranslatorInterface $translator;
/**
* MedipimApi constructor.
* @param string $medipim_api_key_id API key id for Medipim API call
* @param string $medipim_api_key_value Api key (secret) value for Medipim API call
* @param TranslatorInterface $translator TranslatorInterface object for I18N purpose
*/
public function __construct(string $medipim_api_key_id,string $medipim_api_key_value,TranslatorInterface $translator)
{
$this->translator = $translator;
$this->medipimApiV3Client = new MedipimApiV3Client($medipim_api_key_id,$medipim_api_key_value);
}
....
当我尝试致电此服务时,出现此错误:
无法自动装配服务“ App \ Services \ MedipimApi”:参数 类型“ __construct()”的“ $ medipim_api_key_id”具有类型提示 “字符串”,则应显式配置其值。
仅当我复制services.yaml
的值并将其粘贴到我的services_env.yaml
(其中env是我当前的环境)时,它才起作用。
#config/services_dev.yaml
parameters:
app.medipim_api_key_value: '%env(resolve:MEDIPIM_API_KEY)%'
app.medipim_api_key_id: 326
services:
[6 lines ...]
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Kernel.php}'
App\Services\MedipimApi:
arguments:
$medipim_api_key_id: '%app.medipim_api_key_id%'
$medipim_api_key_value: '%app.medipim_api_key_value%'
[10 lines ...]
现在可以了!
为什么行得通?
Symfony应该按照here的描述加载文件:
对于开发环境,Symfony加载以下配置文件并 目录,并按此顺序:
- config / packages / *
- config / packages / dev / *
- config / services.yaml
- config / services_dev.yaml
我想念什么?
编辑
我的内核类看起来正确。它先加载services.yaml,然后再加载services_env.yaml:
class Kernel extends BaseKernel
{
[1 line...]
protected function configureContainer(ContainerConfigurator $container): void
{
$container->import('../config/{packages}/*.yaml');
$container->import('../config/{packages}/'.$this->environment.'/*.yaml');
if (is_file(\dirname(__DIR__).'/config/services.yaml')) {
$container->import('../config/{services}.yaml');
$container->import('../config/{services}_'.$this->environment.'.yaml');
} elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) {
(require $path)($container->withPath($path),$this);
}
}
[14 lines...]
解决方法
为什么要在yml文件中将param xx_id配置为int?在您的服务中,您将id键入为字符串!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。