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

Symfony For中的文件服务配置是什么?

席成仁
2023-03-14

简短版本:Symfony文件:SomeFile.php服务配置做什么?

最近,在Symfony项目中工作时,我在service.yaml文件中输入了无效的服务定义。我收到了这个非常有用的错误消息

配置键"foo"不支持"/用户/alanStorm/站点/symfony-4/my-project/config/services.yaml"中的定义"App\Services\ServiceA"。允许的配置键是"别名"、"父"、"类"、"共享"、"合成"、"懒惰"、"公共"、"抽象"、"弃用"、"工厂"、"文件"、"参数"、"属性"、"配置器"、"调用"、"标记"、"装饰"、"decoration_inner_name"、"decoration_priority","autowire","autoconfiure","bind"在 /Users/alanstorm/Sites/symfony-4/my-project/config/services.yaml(它加载在资源/用户/alanStorm/站点/Symffony-4/my-project/config/services.yaml中)。

我想我以前从未见过Symfony服务的所有有效配置。我试图了解文件的配置是用于什么以及如何使用它。

我试图用它配置一个服务

App\Services\ServiceA:
    file: SomeFile.php

Symfony抱怨道

警告:include_once(SomeFile.php):无法打开流:没有这样的文件或目录

我试着把一个名为SomeFile.php的文件放在`src/SomeFile.php,Symfony抱怨道

自动加载程序希望在文件“/Users/alanstrom/Sites/symfony-4/my project/vendor/composer/./../src/SomeFile.php”中定义类“App\SomeFile”。已找到该文件,但该类不在其中,类名或命名空间可能在/Users/alanstrome/Sites/symfony-4/my project/config/services.yaml(加载在resource/Users/alanstrom/Sites/symfony-4/my project/config/services.yaml中)中有输入错误。

因此,我在src/SomeFile.php中定义了一个名为App\SomeFile的类

#File: src/SomeFile.php
namespace App;
class SomeFile {
}

Symfony加载了这个文件--但是当回到

警告:include_once(SomeFile.php):无法打开流:var/cache/dev/ContainerG6s3qUD/getServiceA2Service.php(第11行)中没有这样的文件或目录

最后,我检查了``文件,看到它包含了这一行

#File: var/cache/dev/ContainerG6s3qUD/getServiceA2Service.php
//...
include_once 'SomeFile.php';
//...

所以,我能说的最好的是这个文件配置是composer autoloader的某种替代品——但我找不到任何关于如何确认您的怀疑或如何使用它的文档。

有人能帮我理解这个配置字段是用于什么的吗?


共有1个答案

陆宝
2023-03-14

多亏了一些互联网朋友的帮助,他们挖出了一些旧的留档,我现在知道了file服务配置是为了在服务加载之前包含一个PHP。

有几件事把我绊倒了。首先——您需要使用%kernel.root\u dir%参数才能工作

App\Services\ServiceA:
    public: true
    file: "%kernel.root_dir%/foo.php"

底层容器代码希望这是一个完整的路径。

特别棘手的是以下异常消息

自动加载程序期望类"App\某物文件"定义在文件"/用户/alanStorm/站点/symfony-4/my-project/供应商/作曲家/.../.../src/ile.php”。

事实证明,这与我的文件配置没有任何关系。相反,此错误消息是以下默认service.yaml配置的结果

_defaults:
    autowire: true
    public: true

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

因为我包含的文件src中,Symfony的资源配置似乎试图将其作为类文件加载。当它不是一个班级档案时,它抱怨道。然后,当文件加载程序试图加载一个没有%kernel.root\u dir%的路径时,事情仍然很糟糕。

如果您要一起使用这两种配置模式,您需要确保排除您的filefile

    exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php,foo.php}'
 类似资料:
  • 部署配置文件是 Puppet 最常见的用途之一。许多服务都需要一些配置文件, 你可以让 Puppet 使用 file 资源将这些配置文件推送到客户端,如下面的代码所示: file { "/opt/nginx/conf.d/app_production.conf": source => "puppet:///modules/app/app_production.conf", } source

  • 我想实现以下目标: 在“开发”模式下,在当前webapp中执行Spring云配置 因此,当前webapp的类路径包含对配置服务器和客户端的依赖关系: 在开发模式下,并在引导程序中具有以下属性。yml,没问题(嵌入式配置服务器已配置并启动) 当不在'dev'模式(例如spring.profiles.active=prod)时,当前的webapp不会启动:它无法自动装配我的属性(我猜嵌入式服务器是以错

  • 我在Google cloud platform上使用Kubernetes运行thingsboard.io/docs/user-guide/install/Kubernetes/#tbyaml-file。 问题是的协议是否应该是?

  • 我想用一些蓝牙低能耗开发工具包创建我自己的iBeacon。苹果尚未发布iBeacons的规范,然而,一些硬件开发人员已经根据AirLocate示例代码对iBeacon进行了反向工程,并开始销售iBeacon开发工具包。 那么什么是iBeacon蓝牙模式? 蓝牙低能耗使用GATT进行LE配置文件服务发现。因此,我认为我们需要知道iBeacon属性的属性句柄、属性类型、属性值,以及可能的属性权限。因此

  • log4j2配置的留档提供了一个相当于默认配置的好的示例XML文档: 等效文件看起来像(有效的)YAML吗?