【问题标题】:Can't get Composer to load classes when using a file repository使用文件存储库时无法让 Composer 加载类
【发布时间】:2020-10-07 11:27:31
【问题描述】:

我是 PHP 新手,我只是想创建一个包 ("simple-php"),然后是一个使用该包的示例项目 ("example-php")。

simple-php(包)

simple-php 有一个作曲家文件:

{
    "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();

但是当我运行页面时,我得到:

致命错误:未捕获的错误:在 /var/www/html/index.php:21 中找不到类“Simple\HelloWorld”

我想我没有正确设置某种命名空间,但我看不到它。如何加载HelloWorld 类?

我正在使用 Docker php:7.2-apache 映像。

【问题讨论】:

  • 您能显示vendor/autoload.php 文件中的内容吗?
  • 你是否在任何 repo 或 git 中上传了这个作曲家?如果可能的话,你能分享一下吗?
  • 我已经检查过了,它工作正常,但你在HelloWorld.php 文件中犯了一个错误,错过了构造函数括号,将其更改为public function __construct() {}
  • 看看这个,我已经为你创建了github.com/turivishal/simple-php-composer
  • 好的,你也可以检查文件夹和文件的权限..

标签: php docker composer-php


【解决方案1】:

问题是:我在 Apache 中使用 Docker 映像,但我没有提供包含 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 在调试方面的帮助。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2016-10-05
    • 2013-02-17
    • 2013-11-03
    • 2012-09-29
    • 2017-12-18
    • 1970-01-01
    • 2022-10-04
    • 2016-05-10
    相关资源
    最近更新 更多