Пакет услуг Laravel, который требует другого пакета композитора - PullRequest
0 голосов
/ 24 мая 2018

Итак, я пытаюсь создать поставщика услуг Laravel.

TLDR;при использовании класса из моего каталога поставщиков поставщиков услуг он возвращает класс не найден, я думаю, что он не вызывается из моего автозагрузчика.

Полный вопрос:

Мне нужно включить несколько вещей, перечисленных ниже:

composer.json

{
    ...
    "require": {
       "erusev/parsedown-extra": "dev-master",
       "symfony/browser-kit": "^4.2@dev"
    }
}

Когда я пытаюсь использовать любой из них, я получаю ошибки, такие как

Class '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 голосов
/ 24 мая 2018

Я ценю вашу помощь Акен Робертс !Вы были правы, что-то происходило с моим 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
...