为什么composer autoload在macOS Docker容器上不起作用?
文件结构如下:为什么composer autoload在macOS Docker容器上不起作用?,macos,docker-compose,composer-php,autoload,Macos,Docker Compose,Composer Php,Autoload,文件结构如下: index.php composer.json composer.lock -lib --books ---SearchClient.php (contains class books\SearchClient 以下docker-compose.yml+PHP在Windows上工作: { "name" : "keithdavis/books", "description" : "", "version"
index.php
composer.json
composer.lock
-lib
--books
---SearchClient.php (contains class books\SearchClient
以下docker-compose.yml+PHP在Windows上工作:
{
"name" : "keithdavis/books",
"description" : "",
"version" : "0.1",
"minimum-stability": "beta",
"require" : {
"ext-curl" : "*",
"ext-json" : "*",
"guzzlehttp/guzzle": "^6.3"
},
"autoload" : {
"psr-4": {
"books\\": "lib"
}
}
}
在调试中,似乎路径“lib”是问题所在,但我尝试了“/lib”,但这也不起作用。我想也许我的作曲家安装不正确。我在Windows上是一名经验丰富的PHP开发人员,但对Mac来说相对较新,因此我对在Mac上安装Composer的最佳方式并不十分了解。我在全球范围内遵循了这些指示:
查看文件结构,搜索客户端类的名称空间需要
namespace books\books代码>
这是因为您正在lib文件夹上设置名称空间。不必在名称空间中使用book两次,您可以通过添加
{
"name" : "keithdavis/books",
"description" : "",
"version" : "0.1",
"minimum-stability": "beta",
"require" : {
"ext-curl" : "*",
"ext-json" : "*",
"guzzlehttp/guzzle": "^6.3"
},
"autoload" : {
"psr-4": {
"books\\": "lib/books"
}
}
}
确保在更改自动加载时运行composer dumpautoload
,以便重建名称空间
希望这能有所帮助。我不明白为什么这在Windows上会起作用,但您的自动加载配置看起来应该是这样的:books\\”:“lib/books”
否则您的类必须位于books\books
命名空间中。是的,这在这两个命名空间中都能起作用,但正如上面的注释所述,奇怪的是它在Windows中都能起作用。
( ! ) Fatal error: Uncaught Error: Class 'books\SearchClient' not found in /var/www/html/search.php on line 6
( ! ) Error: Class 'books\SearchClient' not found in /var/www/html/search.php on line 6
Call Stack
# Time Memory Function Location
1 0.0032 416944 {main}( ) .../search.php:0
{
"name" : "keithdavis/books",
"description" : "",
"version" : "0.1",
"minimum-stability": "beta",
"require" : {
"ext-curl" : "*",
"ext-json" : "*",
"guzzlehttp/guzzle": "^6.3"
},
"autoload" : {
"psr-4": {
"books\\": "lib/books"
}
}
}