在关注并调整this
后,我收到以下错误消息ParameterNotFoundException:您已请求不存在的参数“mynamespace_admin.amazon_s3.aws_key”。你的意思是:“mynamespace_admin.amazon_s3.class”?
在config.yml中我有:
mynamespace_admin:
amazon_s3:
aws_key: %amazon_aws_key%
aws_secret_key: %amazon_aws_secret_key%
base_url: %amazon_s3_base_url%
在我的parameters.yml中,我有:
amazon_aws_key: ###
amazon_aws_secret_key: ###
amazon_s3_base_url: ###
amazon_s3_bucket_name: ###
在services.yml:
parameters:
mynamespace_admin.amazon_s3.class: AmazonS3
mynamespace_admin.image_uploader.class: mynamespace\Bundle\AdminBundle\Uploader\ImageUploader
mynamespace_admin:
amazon_s3:
class: %mynamespace_admin.amazon_s3.class%
arguments:
- "%mynamespace_admin.amazon_s3.aws_key%"
- "%mynamespace_admin.amazon_s3.aws_secret_key%"
image_uploader:
class: mynamespace_admin.image_uploader.class%
arguments: [image_storage_filesystem]
任何人都可以看到我的配置错误或建议如何调试吗?为什么不能从config.yml读取mynamespace_admin.amazon_s3.aws_key?
答案 0 :(得分:1)
如果服务配置中的parameters
键下没有列出内容,则不会认为它是参数。
在所有其他情况下(services
键除外),假设它是扩展的配置。在这种情况下,扩展名为mynamespace_admin
。该扩展应该解析设置并可能将它们作为参数放在容器中,或者使用它们来决定要包含哪些文件等。
假设您给出的配置有一个正确的Configuration
类,如果您想将配置用作参数,您的扩展名将如下所示:
// ...
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class MynamespaceAdminExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
// ... do some other stuff, like loading service definition files
// loop through the processed config and save them as parameters
foreach ($config['amazon_s3'] as $name => $value) {
$container->setParameter('mynamespace_admin.amazon_s3.'.$name, $value);
}
}
}