具有 PHPSpec 的 PHP composer 包中的文件结构

File structure in a PHP composer package with PHPSpec

我有一个工作的作曲家包,只有一个文件和一个 class。所以,现在我正在尝试更改包,使其更像 SOLID。

我有这样的文件结构...

PackageName.php
addresses.php
names.php
interfaces
    names.php
    addresses.php

当我使用 PHPSpec 时,主要 PackageName.php 中的方法正在得到验证,但在其中一种方法中,我有类似...

namespace blah\PackageName;

use blah\PackageName\ProcessNames;

class PackageName
{
    public function formatData($user)
    {
        $place_holders = array();
        $place_holders = ProcessNames::process_name($user, $place_holders);
        $place_holders = ProcessAddresses::process_address($user, $place_holders);
        return json_encode($place_holders);
    }
}

给出错误...

48 ! should do the address exception [err:Error("Class 'blah\PackageName\ProcessNames' not found")] has been thrown.

composer.json 就像...

{
    "name": "blah\PackageName",
    "description": "Format data.",
    "require": {
        "nesbot/carbon": "^1.34",
        "php": ">7.0.0"
    },
    "require-dev": {
        "phpspec/phpspec": "^4.3"
    },
    "authors": [
        {
            "name": "me",
            "email": "me@emailaddress.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "blah\PackageName\": "src/",
            "spec\blah\PackageName\": "spec/"
        },
        "files": {
            "src/interfaces/names.php",
            "src/names.php"
        }
    }
}

我看不到如何在包中包含文件。我不确定我是否需要 composer.json 上的 "files" 部分,但我正在尝试弄清楚如何去做。非常感谢任何信息。

这与今天其他人遇到的问题相同!一个简单的错误。

替换:

namespace blah\PackageName;

与:

namespace blah;

完整的 class 名称包括名称空间和 class 名称。所以基本上你的 class 实际上是 blah\PackageName\Packagename

的一个实例

可能会从 composer.json 中取出 Packagename,这取决于您的需要,如果您更改它,请记住 运行 composer dumpautoload