所以我正在尝试创建一个Laravel服务提供商。
TLDR;使用我的服务提供商供应商目录中的类时,它返回找不到的类, 我认为它不是从我的自动加载器调用的。
完整问题:
我需要列出下面列出的一些内容:
composer.json
{
...
"require": {
"erusev/parsedown-extra": "dev-master",
"symfony/browser-kit": "^4.2@dev"
}
}
当我尝试使用其中任何一个时,我会收到错误,例如
未找到类'Symfony \ Component \ DomCrawler \ Crawler'
我的服务提供商类看起来像这样:
/**
* Register the application services.
*/
public function register()
{
$this->app->make('Namespace\PackageName\DocsController');
}
现在ParsedownExtra是PSR0所以我已经通过包含它们来克服它
/**
* Register the application services.
*/
public function register()
{
include_once __DIR__ .'/../vendor/erusev/parsedown/Parsedown.php';
include_once __DIR__ .'/../vendor/erusev/parsedown-extra/ParsedownExtra.php';
$this->app->make('Namespace\PackageName\DocsController');
}
我觉得这很乱。
解决这个问题的正确方法是什么?
我看到Laravel文档中有一个额外的部分,但是如果有人禁用了包发现,这将不起作用。
https://laravel.com/docs/5.6/packages#package-discovery
如果应用程序在本地开发中,DocsController本质上发布一个路由,它返回使用Symfony包的模型(类);我相信用户应用程序正在寻找自己供应商内部的Symfony而不是从我的服务器中加载它。
答案 0 :(得分:0)
我向你提供帮助Aken Roberts!你是对的,我的composer.json
发生了一些事情,我最后看了几个其他软件包并更新了我的信息。
如果其他人有像我这样的问题,我会发布我的composer.json。
{
"name": "namespace/packagename",
"type": "library",
"description": "A short description",
"version": "0.0.1",
"keywords": ["components", "includes", "helpers"],
"homepage": "https://bitbucket-handle.bitbucket.io/packagename",
"support": {
"issues": "https://bitbucket.org/bitbucket-handle/packagename/issues",
"source": "https://bitbucket.org/bitbucket-handle/packagename"
},
"license": "MIT",
"authors": [
{
"name": "Author Name",
"email": "author@email.com",
"homepage": "https://author-website.com"
}
],
"require": {
"php": "^7.1.3",
"erusev/parsedown-extra": "^0.7.1",
"symfony/browser-kit": "^4.2@dev"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2",
"phpunit/phpunit": "^4.8.35 || ^5.7"
},
"autoload": {
"psr-4": {
"NAMESPACE\\PackageName\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"sort-packages": true
},
"scripts": {
"test": ["@phpunit", "@phpcs"],
"phpunit": "phpunit --verbose --coverage-clover=coverage.xml",
"phpcs": "php-cs-fixer fix -v --diff --dry-run",
"phpstan":
"phpstan analyse --configuration phpstan.neon --level 3 src tests"
},
"extra": {
"laravel": {
"providers": ["NAMESPACE\\PackageName\\PackageNameServiceProvider"]
}
}
}
以下是我的项目结构:
PackageName
|-- CHANGELOG.md
|-- README.md
|-- composer.json
|-- composer.lock
|-- mix-manifest.json
|-- package.json
|-- phpunit.xml.dist
|-- resources
|-- src
| |-- PackageNameServiceProvider.php
| |-- DocsController.php
| |-- Documentation.php
| |-- assets
| |-- config
| |-- docs
| |-- routes.php
| `-- views
|-- tests
`-- webpack.mix.js