При необходимости класс Laravel CustomServiceProvider не найден в пакете

У меня проблемы с пользовательским пакетом композитора, который я создал для работы с Laravel. Я выполнил все необходимые шаги, о которых говорили другие. Сначала потребуйте пакет, затем composer-dumpautoload -o, а затем добавьте ServiceProvider в config/app.php. Однако laravel не может найти пакет ServiceProvider. Может быть, у меня нет интервала между именами? Вот мой код ниже вместе со ссылкой на мое репозиторий на github

https://github.com/InspiredByKeith/forecast-package

config / app.php

KeithRoye\Forecast\WeatherServiceProvider::class,

WeatherServiceProvider.php

 <?php

namespace KeithRoye\Forecast;

use Illuminate\Support\ServiceProvider;

class WeatherServiceProvider extends ServiceProvider

{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadRoutesFrom(__DIR__.'/routes/web.php');
    }
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Composer.json пакета

{
    "name": "keithroye/forecast",
    "description": "This package will allow users to obtain a 5 day weather forecast based upon the given zip code provided.",
    "type": "library",
    "require-dev": {
        "guzzlehttp/guzzle": "^6.3@dev"
    },
    "autoload-dev": {
        "psr-4": {
            "KeithRoye\\Forecast": "src/"
        }
    },

    "license": "MIT",
    "authors": [
        {
            "name": "Keith Roye",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev"
}

Composer.json приложения

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "keithroye/forecast": "dev-master",
        "laravel/framework": "5.7.*",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.0"
    },
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": [
            ]
        }
    },
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 600
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны включить начальную обратную косую черту в пространство имен определения композитора psr-4:

"autoload-dev": {
    "psr-4": {
        "KeithRoye\\Forecast\\": "src/"
    }
},

К сожалению, это не сработало. По-прежнему возникает та же ошибка.

Keith Roye 24.10.2018 00:23

Вы запускали composer dump после обновления файла JSON? Вы также можете вручную подтвердить, правильно ли был обновлен vendor/composer/autoload_psr4.php с вашим пространством имен.

Pablo 24.10.2018 04:27

Эй, я даже не вижу свой пакет композитора в этом файле. Вы можете сделать мне одолжение. Мое репозиторий git был обновлен с учетом ваших изменений. Можете ли вы повторить то, что я делаю, чтобы увидеть, где я ошибаюсь. если вы создаете новое тестовое приложение laravel, URL-адрес, который вы должны запустить, если используете laravel valet, например, test.test / прогноз? zip = 32811. вы должны получить ошибку токена api, если не добавили ее.

Keith Roye 24.10.2018 14:46
Ответ принят как подходящий

Поскольку вы используете autoload-dev => замените его на autoload (и сделайте то же самое с require-dev => require).

Документация композитора объясняет это, но я понимаю, что это непонятно, если вы не знакомы с терминологией.

https://getcomposer.org/doc/04-schema.md#autoload-dev

autoload-dev (root-only) …

И документация для "root-only", то есть Корневой пакет:

Certain fields only apply when in the root package context.

Я думаю, что приведенный здесь пример неплох:

A package can be the root package or not, depending on the context. For example, if your project depends on the monolog library, your project is the root package. However, if you clone monolog from GitHub in order to fix a bug in it, then monolog is the root package.

Или по-другому

autoload-dev актуален только при разработке пакета ваш. Обычно вы определяете там свои тесты, которые обычно помещают следующий в src/ в tests/ (на том же верхнем уровне), и поэтому для этого им нужна отдельная директива.

Я протестирую это через несколько часов, когда у меня будет обеденный перерыв, но я чувствую, что вот оно. Сообщу вам мои результаты, если вы уже не проверили их и не подтвердили.

Keith Roye 25.10.2018 16:05

@KeithRoye, конечно, скрестим пальцы ?

mark 25.10.2018 21:37

Выпивает за меня :) ха-ха. Спасибо друг!

Keith Roye 25.10.2018 23:38

Замените autoload-dev на autoload и обратную косую черту после Forecast в разделе ниже в composer.json.

"autoload-dev": {
    "psr-4": {
        "KeithRoye\\Forecast\\": "src/"
    }
}

После редактирования запустите composer dump-autoload или composer dumpautoload и проверьте еще раз.

Другие вопросы по теме