Модуль автозагрузки PHP PSR-4 - PullRequest
       45

Модуль автозагрузки PHP PSR-4

0 голосов
/ 21 сентября 2019

Я занимаюсь разработкой модуля для CraftCMS.Я создал модуль в modules/Core.php, который работает нормально, и я могу ссылаться на него, используя modules\Core::class, но я хочу реорганизовать свои модули.Я не очень знаком с загрузкой PSR-4, но я взглянул на несколько модулей, чтобы попытаться скопировать файловую структуру и файл композитора.

Вот структура файла, которую я хочу:

modules
  └── wrux
    └── Core
      ├── README.md
      ├── composer.json
      └── src
        └── Core.php

Вот мой modules/wrux/Core/composer.json файл:

{
  "name": "wrux/Core",
  "require": {
    "craftcms/cms": "^3.2.0"
  },
  "autoload": {
    "psr-4": {
      "wrux\\Core\\": "src/"
    }
  }
}

Автозагрузка в моем composer.json файле в корне проекта:

  "autoload": {
    "psr-4": {
      "modules\\": "modules/"
    }
  },

После запуска composer dump-autoload я былнадеясь, что я смогу использовать пространство имен wrux\Core, но оно не работает.Мой модуль доступен только из пространства имен modules\wrux\Core\src.

Есть идеи?

1 Ответ

0 голосов
/ 21 сентября 2019

Чтобы автоматически загружать пользовательские пакеты для вашей локальной файловой системы, вы должны указать, чтобы composer также просматривал эти папки, поэтому вместо автоматической загрузки папки модулей вы должны ссылаться на нее как на репозиторий.

В вашем composer.json Файл корневого проекта используется:

{
    ...,
    "repositories": [
        {
            "type": "path",
            "url": "../modules/wrux/Core"
        }
    ],
    ...
}

Затем из корня проекта требуется ваш пакет с: composer require wrux/Core, и вы должны увидеть, что композитор действует так, как будто вы загружаете внешний пакет, но выфактически используют вашу файловую систему в качестве хранилища для этого пакета.

...