Symfony4 加载 类 自定义文件夹时出错 "Expected to find class... but it was not found"
Symfony4 Error loading classes custom folder "Expected to find class... but it was not found"
问题
我正在尝试设置自定义目录结构
对于我的 Symfony 项目中的一些共享 classes。我
想在我的根目录中创建一个自定义文件夹
项目,我想使用 Symfony 自动加载
自动注册服务的功能
那个文件夹。
所以我向
services.yaml 文件:
# src ./config/services.yaml
services:
...
TestNamespace\:
resource: '../TestNamespace/*'
...
并且我在自定义文件夹中添加了一个空 class:
# src ./TestNamespace/TestClass.php
namespace TestNamespace;
class TestClass
{
}
当我 运行 应用程序时,出现以下错误:
(1/2) InvalidArgumentException
Expected to find class "TestNamespace\TestClass" in file
"/path/to/ClassLoadErrorDemo/demo/TestNamespace/TestClass.php"
while importing services from resource
"../TestNamespace/*", but it was not found! Check the
namespace prefix used with the resource.
(2/2) FileLoaderLoadException
Expected to find class "TestNamespace\TestClass" in file
"/path/to/ClassLoadErrorDemo/demo/TestNamespace/TestClass.php" while
importing services from resource "../TestNamespace/*", but it was not
found! Check the namespace prefix used with the resource in
/path/to/ClassLoadErrorDemo/demo/config/services.yaml (which is loaded
in resource "/path/to/ClassLoadErrorDemo/demo/config/services.yaml").
我仔细检查了路径、命名空间和 class
多次命名,一切似乎都很好,我
不明白为什么我仍然收到错误。
./src 文件夹中的控制器似乎加载正常。
我在这里做错了什么?
重现步骤
我创建了一个演示存储库来隔离问题。
git clone https://github.com/smoelker/SymfonyClassLoadErrorDemo.git
cd SymfonyClassLoadErrorDemo/demo
composer install
mv TestNamespace/TestClass.php_ TestNamespace/TestClass.php
php bin/console server:start
更新您的 composer.json 自动加载设置
{
[...]
"autoload": {
"psr-4": {
"TestNamespace\": "TestNamespace/",
"": "src/"
}
},
[...]
}
在 运行 之后:composer dump-autoload
再试一次。
composer dump-autoload --classmap-authoritative
仅当您 src
目录在您 运行 命令时存在时才有效。
这可能是多阶段 Docker 构建的一个问题,尤其是当您通常只将 composer.json
/composer.lock
复制到构建映像中时。
问题
我正在尝试设置自定义目录结构 对于我的 Symfony 项目中的一些共享 classes。我 想在我的根目录中创建一个自定义文件夹 项目,我想使用 Symfony 自动加载 自动注册服务的功能 那个文件夹。
所以我向 services.yaml 文件:
# src ./config/services.yaml
services:
...
TestNamespace\:
resource: '../TestNamespace/*'
...
并且我在自定义文件夹中添加了一个空 class:
# src ./TestNamespace/TestClass.php
namespace TestNamespace;
class TestClass
{
}
当我 运行 应用程序时,出现以下错误:
(1/2) InvalidArgumentException
Expected to find class "TestNamespace\TestClass" in file
"/path/to/ClassLoadErrorDemo/demo/TestNamespace/TestClass.php"
while importing services from resource
"../TestNamespace/*", but it was not found! Check the
namespace prefix used with the resource.
(2/2) FileLoaderLoadException
Expected to find class "TestNamespace\TestClass" in file
"/path/to/ClassLoadErrorDemo/demo/TestNamespace/TestClass.php" while
importing services from resource "../TestNamespace/*", but it was not
found! Check the namespace prefix used with the resource in
/path/to/ClassLoadErrorDemo/demo/config/services.yaml (which is loaded
in resource "/path/to/ClassLoadErrorDemo/demo/config/services.yaml").
我仔细检查了路径、命名空间和 class 多次命名,一切似乎都很好,我 不明白为什么我仍然收到错误。 ./src 文件夹中的控制器似乎加载正常。 我在这里做错了什么?
重现步骤
我创建了一个演示存储库来隔离问题。
git clone https://github.com/smoelker/SymfonyClassLoadErrorDemo.git
cd SymfonyClassLoadErrorDemo/demo
composer install
mv TestNamespace/TestClass.php_ TestNamespace/TestClass.php
php bin/console server:start
更新您的 composer.json 自动加载设置
{
[...]
"autoload": {
"psr-4": {
"TestNamespace\": "TestNamespace/",
"": "src/"
}
},
[...]
}
在 运行 之后:composer dump-autoload
再试一次。
composer dump-autoload --classmap-authoritative
仅当您 src
目录在您 运行 命令时存在时才有效。
这可能是多阶段 Docker 构建的一个问题,尤其是当您通常只将 composer.json
/composer.lock
复制到构建映像中时。