Php 子文件夹和composer中的Laravel模块

Php 子文件夹和composer中的Laravel模块,php,laravel,module,composer-php,Php,Laravel,Module,Composer Php,我正在使用,我想在子文件夹中创建模块。因此,这是不可能的,但可以在composer.json中更改路径。因此,我创建了新模块Role2,并将其移动到子文件夹Administration。然后我更改了模块的composer.json: { "name": "nwidart/role2", "description": "", "authors": [ { "name": "Nicolas Widart", "e

我正在使用,我想在子文件夹中创建模块。因此,这是不可能的,但可以在
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\\": ""
        }
    }
}
...
"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"
    }
  },
...
但是在command
composer dumpautoload
之后,我在command
php artisan模块:list
中看不到任何内容,在
vendor/composer/autoload_psr4.php
中也看不到该模块的路径。生成多个composer(一个在根目录中,一个在模块中)时,我做错了什么或缺少了什么?或者在子文件夹中有一些简单的模块选项

我在root
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\\": ""
        }
    }
}
...
"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"
    }
  },
...

composer.json中的
autoload
->
psr-4
键用于定义应用程序的psr-4根命名空间

所做的是定义一个名称空间和目录位置,以便Autoloader查找该名称空间下的文件

与您的root
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
是其基本目录。通过定义它,您可以告诉autoloader名称空间为
App
的所有文件都将驻留在目录“App”中。之后,Autoloader将在
PSR-4
路径中的
app
目录中遍历基本名称空间
app
之后的名称空间路径

例如:Controller
App\Controller\ExampleController
将告诉Autoloader类定义将在
App/Controller/ExampleController
中找到

因此,您需要根据命名空间
Modules\\Administration\\Role2\\
指定模块的基本目录位置,该命名空间是模块文件夹的基本源目录

希望有帮助