У меня проблемы с пользовательским пакетом композитора, который я создал для работы с 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
}






Вы должны включить начальную обратную косую черту в пространство имен определения композитора psr-4:
"autoload-dev": {
"psr-4": {
"KeithRoye\\Forecast\\": "src/"
}
},
Вы запускали composer dump после обновления файла JSON? Вы также можете вручную подтвердить, правильно ли был обновлен vendor/composer/autoload_psr4.php с вашим пространством имен.
Эй, я даже не вижу свой пакет композитора в этом файле. Вы можете сделать мне одолжение. Мое репозиторий git был обновлен с учетом ваших изменений. Можете ли вы повторить то, что я делаю, чтобы увидеть, где я ошибаюсь. если вы создаете новое тестовое приложение laravel, URL-адрес, который вы должны запустить, если используете laravel valet, например, test.test / прогноз? zip = 32811. вы должны получить ошибку токена api, если не добавили ее.
Поскольку вы используете 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/ (на том же верхнем уровне), и поэтому для этого им нужна отдельная директива.
Я протестирую это через несколько часов, когда у меня будет обеденный перерыв, но я чувствую, что вот оно. Сообщу вам мои результаты, если вы уже не проверили их и не подтвердили.
@KeithRoye, конечно, скрестим пальцы ?
Выпивает за меня :) ха-ха. Спасибо друг!
Замените autoload-dev на autoload и обратную косую черту после Forecast в разделе ниже в composer.json.
"autoload-dev": {
"psr-4": {
"KeithRoye\\Forecast\\": "src/"
}
}
После редактирования запустите composer dump-autoload или composer dumpautoload и проверьте еще раз.
К сожалению, это не сработало. По-прежнему возникает та же ошибка.