【问题标题】:Laravel service package that requires another composer package需要另一个 composer 包的 Laravel 服务包
【发布时间】:2018-11-03 03:23:07
【问题描述】:

所以我正在尝试创建一个 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,而不是从我的供应商那里加载它。

【问题讨论】:

  • 嗨迈克尔! Composer 包和 Laravel 服务提供者是两个独立的东西,不一定相关。您能否添加一些有关您的总体目标/意图的细节?另外,DocsController 是什么?
  • 谢谢你,我会更新的
  • 更新了标题并添加了更多信息
  • 你是否正在尝试开发一个 Laravel 开发人员可以通过 Composer 安装的包?
  • @AkenRoberts 是的,这是正确的。由于某种原因,它没有正确自动加载我的包要求。

标签: laravel composer-php package


【解决方案1】:

感谢您的帮助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

【讨论】:

  • 在一些方向之后搞清楚它做得很好。很高兴我能帮助你! :)
猜你喜欢
  • 1970-01-01
  • 2011-10-31
  • 2018-06-06
  • 2021-03-25
  • 2018-04-23
  • 2013-04-18
  • 2017-06-26
  • 2015-08-23
  • 2017-06-15
相关资源
最近更新 更多