自定义php包中的命名空间问题,无法执行“使用joelwmale / RSSFeedPHP”

时间:2018-12-28 07:51:09

标签: php composer-php

我已经创建了自己的composer程序包,但是尝试在程序包本身之外(即在我的laravel应用程序中)加载和使用它时遇到了一些问题。

我的作曲家文件如下:

{
    "name": "joelwmale/rss-feed-php",
    "type": "library",
    "description": "RSS Feeds for PHP is a very small, lightweight, and easy-to-use library for consuming an RSS feed.",
    "keywords": [
        "rss", 
        "feed", 
        "php"
    ],
    "homepage": "https://github.com/joelwmale/rss-feed-php",
    "support": {
        "issues": "https://github.com/joelwmale/rss-feed-php/issues",
        "source": "https://github.com/joelwmale/rss-feed-php"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "Joel Male",
            "email": "joel@joelmale.com",
            "homepage": "https://www.joelmale.com",
            "role": "Author"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": "^7.1",
        "ext-simplexml": "*",
        "nesbot/carbon": "^1.26.3"
    },
    "require-dev": {
        "phpunit/phpunit": "^7.5",
        "phpstan/phpstan": "^0.11.0@dev"
    },
    "autoload": {
        "psr-4": {
            "RSSFeedPHP\\": "src/RSSFeedPHP/"
        }
    },
    "autoload-dev": { 
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "test": [
            "@phpunit",
            "@phpcs"
        ],
        "phpunit": "vendor/bin/phpunit",
        "phpcs": "php-cs-fixer fix -v --diff --dry-run",
        "phpstan": "phpstan analyse --configuration phpstan.neon --level 3 src tests"
    },
    "extra": {
        "laravel": {
            "providers": [
                "RSSFeedPHP\\Laravel\\ServiceProvider"
            ]
        }
    }
}

我的主要班级位于:src/RSSFeedPHP/RSSFeedPHP.php。但是,当我尝试将其加载到我的laravel应用程序中时:

use joelwmale\RSSFeedPHP;

我得到:

"Class 'joelwmale\RSSFeedPHP' not found"

即使我在laravel应用程序中需要它,也是如此。我可以看到供应商内的joelwmale文件夹,也可以看到我的软件包及其作曲家文件。

composer.json或我设置项目的方式一定有问题-但我无法弄清楚。

有什么想法吗?

编辑:回购链接:https://github.com/joelwmale/rss-feed-php

1 个答案:

答案 0 :(得分:2)

"autoload": {
    "psr-4": {
        "RSSFeedPHP\\": "src/RSSFeedPHP/"
    }
},

这会将您的类注册在RSSFeedPHP名称空间下。现在可以加载 src / RSSFeedPHP / 目录中的所有内容,就像在该命名空间中一样。尝试使用

use RSSFeedPHP\RSSFeedPHP;

请注意,如果文件名为 RSSFeedPHP.php ,则类的名称必须为RSSFeedPHP,因此其名称空间也必须为RSSFeedPHP,即

<?php

namespace RSSFeedPHP;

class RSSFeedPHP {}