Модули Laravel в подпапке и композиторе - PullRequest
0 голосов
/ 21 мая 2018

Я использую Модули Laravel от nwidart , и я хочу создать модуль в подпапке.Согласно проблеме на Github это невозможно, но возможно изменить пути в composer.json.Итак, я создал новый модуль Role2 и переместил его в подпапку Administration.Затем я изменил composer.json:

{
    "name": "nwidart/role2",
    "description": "",
    "authors": [
        {
            "name": "Nicolas Widart",
            "email": "n.widart@gmail.com"
        }
    ],
    "extra": {
        "laravel": {
            "providers": [
                "Modules\\Administration\\Role2\\Providers\\Role2ServiceProvider"
            ],
            "aliases": {

            }
        }
    },
    "autoload": {
        "psr-4": {
            "Modules\\Administration\\Role2\\": ""
        }
    }
}

модуля. Но после команды composer dumpautoload я ничего не вижу в команде php artisan module:list, а также в vendor/composer/autoload_psr4.php пути к этому модулю нет.Что я делаю неправильно или чего не хватает для создания нескольких композиторов (один в корне и один в модуле)?Или есть какой-то простой вариант иметь модуль в подпапке?

Есть то, что у меня есть в корне composer.json:

...
"autoload": {
    "classmap": [
      "database",
      "vendor",
      "app/Easyk"
    ],
    "exclude-from-classmap": [
      "vendor/swiftmailer"
    ],
    "psr-4": {
      "App\\": "app",
      "Modules\\": "Modules",
      "Easyk\\": "app/Easyk",
      "Asipem\\OAuth2ClientManagement\\": "packages/asipem/oauth2-client-management/src",
      "Asipem\\CAPRequestDispatcher\\": "packages/asipem/cap-request-dispatcher/src"
    }
  },
  "autoload-dev": {
    "classmap": [
      "tests/TestCase.php"
    ],
    "psr-4": {
      "Tests\\Unit\\": "tests/unit"
    }
  },
...

1 Ответ

0 голосов
/ 21 мая 2018

autoload -> psr-4 ключ из composer.json используется для определения корневых пространств имен psr-4 для приложения.

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

Как и в вашем корне composer.json

"psr-4": {
  "App\\": "app",
  "Modules\\": "Modules",
  "Easyk\\": "app/Easyk",
  "Asipem\\OAuth2ClientManagement\\": "packages/asipem/oauth2-client-management/src",
  "Asipem\\CAPRequestDispatcher\\": "packages/asipem/cap-request-dispatcher/src"
}

App - это базовое пространство имен, а app - его базовый каталог.Определив его, вы сообщаете автозагрузчику, что все файлы с пространством имен App будут находиться в каталоге app.После этого Autoloader будет проходить по каталогу app по пути PSR-4 для пути к файлу, следующего за пространством имен после базового пространства имен App.

Например: Controller App\Controller\ExampleController сообщит Autoloader, что классопределение будет найдено в app/Controller/ExampleController.

Таким образом, вам нужно указать расположение базового каталога вашего модуля по отношению к пространству имен Modules\\Administration\\Role2\\, которое является каталогом базового источника вашей папки модуля.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...