我是一名PHP新手,只是尝试创建一个包(“simple-php
”),然后创建一个使用该包的示例项目(“example-php
”)。
simple-php(软件包)simple-php
有一个 Composer 文件:
{
"name": "simple/simple-php",
"description": "",
"version": "0.0.1",
"autoload": {
"psr-4": { "Simple\\" : "src/" }
}
}
里面simple-php
是:src/
HelloWorld.php
composer.json
HelloWorld.php
是:namespace Simple;
class HelloWorld
{
public function __construct(
)
}
example-php(软件包的客户端)文件结构为:
index.php
composer.json
composer.json
包括:{
"repositories": [
{
"type": "path",
"url": "../simple-php"
}
],
"require": {
"simple/simple-php": "0.0.1"
}
}
我对此运行php composer.phar install
,并得到composer.lock
:...
{
"name": "simple/simple-php",
"version": "0.0.1",
"dist": {
"type": "path",
"url": "../simple-php",
"reference": "18171b07ac196fb22d8d95578be916e7897d003e"
},
"type": "library",
"autoload": {
"psr-4": {
"Simple\\": "src/"
}
},
"transport-options": {
"relative": true
}
},
...
所以现在在index.php
中,我做了:...
require_once('vendor/autoload.php');
new Simple\HelloWorld();
vendor/autoload.php
存在,顺便说一句,它包含:<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit661a24b81ca7aae7b7471c810ee626fa::getLoader();
但是当我运行页面时,我得到:Fatal error: Uncaught Error: Class 'Simple\HelloWorld' not found in /var/www/html/index.php:21
我想我没有正确设置某种 namespace ,但是我看不到它。如何加载
HelloWorld
类?我正在使用Docker
php:7.2-apache
图像。
最佳答案
问题是:我将Docker镜像与Apache一起使用,没有提供包含example-php
和simple-php
的根文件夹。
在进入example-php
文件夹并运行之前,请执行以下操作:
docker run -d -p 9010:80 --name php-apache -v "$PWD":/var/www/html php:7.2-apache
问题出在
-v
开关上。我改为:docker run -d -p 9010:80 --name php-apache -v "$PWD/..":/var/www/html php:7.2-apache
(然后在测试时使用
example-php
的限定符路径)...并解决了它。
感谢@turivishal在调试方面的帮助。
关于php - 使用文件存储库时无法使Composer加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62432479/