php - 使用文件存储库时无法使Composer加载类

标签 php docker composer-php

我是一名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-phpsimple-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/

相关文章:

javascript - Laravel 5.6 Javascript 输入总和

docker - Jenkins 使用 Docker 设置。无法安装自定义工具

docker - docker 容器中的 pam 限制不起作用

xampp - 配置 symfony 3.2 时出现问题

php - CakePHP 客户端表单验证在哪里?

PHP使用windows账号连接SQL Server

mysql - 如何让服务在退出docker后仍然运行?

laravel - Composer 找不到配置文件

php - 如何强制 Composer 重新安装库?