Laravel服务包需要另一个作曲家包

时间:2018-05-24 02:48:13

标签: laravel composer-php package

所以我正在尝试创建一个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而不是从我的服务器中加载它。

1 个答案:

答案 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