首页 > 解决方案 > Laravel 包自动发现未找到提供程序

问题描述

我正在为 Laravel 创建我的第一个包,但我无法通过 composer 正确安装它。它通过包的 使用 Laravel (v5.5+) 自动发现composer.json,但是当它运行artisan package:discover命令时,它找不到我的自定义 ServiceProvider。这是我的composer.json

{
    "name": "mpemburn/api-consumer",
    "description": "Configurable consumer for RESTful API's",
    "type": "library",
    "keywords": ["api","restful","laravel"],
    "license": "MIT",
    "authors": [
        {
            "name": "Mark Pemburn",
            "email": "mark@pemburn.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "Mpemburn\\ApiConsumer\\": "src/"
        }
    },
    "require": {
        "php": ">=7.4"
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.0-dev"
        },
        "laravel": {
            "providers": [
                "Mpemburn\\ApiConsumer\\ApiConsumerProvider"
            ]
        }
    },
    "minimum-stability": "dev"
}

...这是ApiConsumerProvider

<?php

namespace Mpemburn\ApiConsumer;

use Illuminate\Support\ServiceProvider;
use Mpemburn\ApiConsumer\Handlers\ResponseHandler;
use Mpemburn\ApiConsumer\Interfaces\ResponseHandlerInterface;

class ApiConsumerProvider extends ServiceProvider
{
    public function register(): void
    {
        // Bind ResponseHandlerInterface class(es)
        app()->bind(ResponseHandlerInterface::class, ResponseHandler::class);
    }

    public function boot(): void
    {
        $this->publishes([
            __DIR__.'/../config/api-consumer.php' => config_path('api-consumer.php'),
        ], 'config');
    }
}

从周日开始,我已经仔细检查了这六种方式,但我无法弄清楚我做错了什么。

你可以在这里找到包:https ://github.com/mpemburn/api-consumer

提前感谢您提供的任何帮助!

编辑添加:composer 2.0.6 版,Laravel 8.16.0 版

标签: phplaravelpackagecomposer-php

解决方案


查看了 github 链接 - 问题是您的服务提供者类文件不在 src 目录中

移动目录ApiConsumerProvider.php内部src然后它应该可以工作。

您的 psr4 自动加载键指向命名空间的src目录Mpemburn\ApiConsumer


推荐阅读