文件结构如下:
index.php
composer.json
composer.lock
-lib
--books
---SearchClient.php (contains class booksSearchClient
以下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 booksSearchClient;
require_once __DIR__."/vendor/autoload.php";
$oSearchClient = new SearchClient();
但是,在Macos(Mojave)上:
( ! ) Fatal error: Uncaught Error: Class 'booksSearchClient' not found in /var/www/html/search.php on line 6
( ! ) Error: Class 'booksSearchClient' 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",这也不起作用。我认为也许我的作曲家安装了错误。我是Windows上经验丰富的PHP开发人员,但Mac相对较新,因此我对在Mac上安装作曲家的最佳方法并不是100%。我在全球遵循这些说明:
https://getcomposer.org/doc/00-intro.md#globally
查看您的文件结构搜索客户端的名称空间将需要为 namespace booksbooks;
这是因为您在LIB文件夹上设置了名称空间书。与其在名称空间中使用两次书籍,您可以通过添加
将自动加载器直接指向书籍文件夹{
"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
,以重建名称空间。
希望这会有所帮助。