为什么 composer autoload 在 macOS Docker 容器上不起作用?
Why does composer autoload not work on macOS Docker containers?
文件结构如下:
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"
}
}
}
<?php
use books\SearchClient;
require_once __DIR__."/vendor/autoload.php";
$oSearchClient = new SearchClient();
但是,在 macOS (Mojave) 上:
( ! ) 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
在调试中,似乎路径 "lib" 是问题所在,但我试过“/lib”,但它也不起作用。我想也许我没有正确安装 Composer。我是 Windows 上一位经验丰富的 PHP 开发人员,但对 Mac 相对较新,因此我不是 100% 确定在 Mac 上安装 Composer 的最佳方法。我在全球范围内遵循了这些说明:
查看您的文件结构,搜索客户端 class 的命名空间需要是
namespace books\books;
这是因为您在 lib 文件夹上设置了命名空间书。您可以通过添加
将自动加载器直接指向 book 文件夹,而不是在命名空间中使用 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
以便重建命名空间。
希望对您有所帮助。
文件结构如下:
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"
}
}
}
<?php
use books\SearchClient;
require_once __DIR__."/vendor/autoload.php";
$oSearchClient = new SearchClient();
但是,在 macOS (Mojave) 上:
( ! ) 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
在调试中,似乎路径 "lib" 是问题所在,但我试过“/lib”,但它也不起作用。我想也许我没有正确安装 Composer。我是 Windows 上一位经验丰富的 PHP 开发人员,但对 Mac 相对较新,因此我不是 100% 确定在 Mac 上安装 Composer 的最佳方法。我在全球范围内遵循了这些说明:
查看您的文件结构,搜索客户端 class 的命名空间需要是
namespace books\books;
这是因为您在 lib 文件夹上设置了命名空间书。您可以通过添加
将自动加载器直接指向 book 文件夹,而不是在命名空间中使用 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
以便重建命名空间。
希望对您有所帮助。