当前位置: 首页 > 知识库问答 >
问题:

Symfony将yaml和php配置文件组合在一起

韩博简
2023-03-14

在symfony4中,我希望为服务组合不同的配置文件。在下面的场景中,我尝试从名为services的php配置导入服务。然后在导入其他服务的yaml文件中执行其他服务配置。。

服务。亚马尔

imports:
    - { resource: services.php }


services:

    _defaults:
        autowire: true      
        autoconfigure: true 
        public: false    

    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

服务。php

<?php

use Symfony\Component\DependencyInjection\Definition;

$definition = new Definition();

$definition
    ->setAutowired(true)
    ->setAutoconfigured(true)
    ->setPublic(false)
;

$this->registerClasses($definition, 'App\\', '../src/*', '../src/{Entity,Migrations,Tests}');

$container->getDefinition(\App\SomeClass::class)
    ->setArgument('$param', 'someValue');

类文件

class SomeClass
{
    public function __construct(string $param)
    {
         ...
    }

我得到以下错误:

无法自动连线服务“App\SomeClass”:方法“\uu construct()”的参数“$param”的类型暗示为“string”,应显式配置其值。

另外,我想知道是否需要覆盖yaml中的初始默认定义(或导入的文件已经完成的其他定义),或者我可以继承。不确定这些文件是如何合并的。

共有1个答案

李敏学
2023-03-14

问题是您在src/*中注册了两次类,一次在您的services.php中注册,一次在您的services.yaml中注册。

因此,在第一次运行服务时。php正确定义类和所需参数,然后在第二次运行时使用服务。yaml定义被覆盖,它再次丢失参数。

最小的解决方案是排除SomeClass。php服务中。yaml因此不会再次注册:

App\:
    resource: '../src/*'
    exclude: '../src/{Entity,Migrations,Tests,Kernel.php,SomeClass.php}' # <- here I added SomeClass.php

不过,最好创建一个单独的名称空间,并在YAML中排除该目录,而只在PHP配置中注册该目录。

 类似资料:
  • 我不确定我是否很好地理解了Spring概要文件是如何处理yaml和属性文件的。我试图将这两种类型的配置分开(这两个文件不共享任何配置),但在从yaml配置中读取配置文件时遇到了问题。 我的问题是,当我试图(通过xml)配置我的数据源时,这样做: Spring总是使用YAML文件中的最后一个配置,忽略概要文件。我试图通过web.xml中的contex-parameter或直接将活动概要文件传递给JV

  • 问题内容: 在PHP中生成数组的所有组合,布置和置换的最有效方法是什么? 问题答案: 这是获取所有排列的代码: http://php.net/manual/zh/function.shuffle.php#90615 使用获得功率集的代码,排列是最大长度的排列,功率集应为所有组合。我不知道什么是处置,所以如果您能解释一下,那将会有所帮助。

  • 我想实现一个功能--使用k8s JSON schema/yaml schema验证Kubernetes部署文件(部署yaml或服务yaml或rc yaml)。 目前,我需要设置kubectl和k8s集群可用,以便验证。但是如果没有这个设置,希望使用Go-Client(K8s)API进行验证。 谁能告诉我是否有任何库,我可以用来验证文件?我如何获得K8s模式。是否有生成模式的工具/库?你能给我指明方

  • 我有MyJava。代表我整个项目的Java。过去,我常常执行MyJava。Java在eclipse中运行良好,但现在我想让这个过程更加自动化,并使用GitLab runner管道执行它。 我的YAML文件非常简单,只需读取MyJava。Java并执行它。 MyJava有一个连接到其他文件的代码和依赖项,例如 但是每当我执行文件时,它都会显示每个导入/包的错误,例如: 有什么提示吗? 执行MyJav

  • 5.0.0-alpha 数据分片 配置项说明 dataSources: # 省略数据源配置,请参考使用手册 rules: - !SHARDING tables: # 数据分片规则配置 <logic-table-name> (+): # 逻辑表名称 actualDataNodes (?): # 由数据源名 + 表名组成(参考Inline语法规则) databas

  • 简介 YAML 提供通过配置文件的方式与 ShardingSphere-JDBC 交互。配合治理模块一同使用时,持久化在配置中心的配置均为 YAML 格式。 YAML 配置是最常见的配置方式,可以省略编程的复杂度,简化用户配置。 使用方式 创建简单数据源 通过 YamlShardingSphereDataSourceFactory 工厂创建的 ShardingSphereDataSource 实现