laravel-modules: Laravel 7 - ModuleNotFoundException

Hi,

Testing after updating to Laravel 7, running into a few issues, mainly this one has me stumped:

$ php artisan module:make TestModule;
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/module.json
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Routes/web.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Routes/api.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Routes/admin.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Providers/AppServiceProvider.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Providers/EventServiceProvider.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Providers/RouteServiceProvider.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Resources/views/index.blade.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Resources/views/admin/index.blade.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Resources/views/layouts/frontend.blade.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Resources/views/layouts/admin.blade.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Listeners/TestEventListener.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Controllers/Frontend/IndexController.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Controllers/Api/ApiController.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Http/Controllers/Admin/AdminController.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/Config/config.php
Created : /Users/nabeelshahzad/dev/nabeelio/phpvms/modules/TestModule/composer.json
[2020-05-22T18:39:50.366694+00:00] dev.ERROR: Module [TestModule] does not exist! {"exception":"[object] (Nwidart\\Modules\\Exceptions\\ModuleNotFoundException(code: 0): Module [TestModule] does not exist! at /Users/nabeelshahzad/dev/nabeelio/phpvms/vendor/nwidart/laravel-modules/src/FileRepository.php:396)"} []

   Nwidart\Modules\Exceptions\ModuleNotFoundException

  Module [TestModule] does not exist!

  at vendor/nwidart/laravel-modules/src/FileRepository.php:396
    392|         if ($module !== null) {
    393|             return $module;
    394|         }
    395|
  > 396|         throw new ModuleNotFoundException("Module [{$name}] does not exist!");
    397|     }
    398|
    399|     /**
    400|      * Get all modules as laravel collection instance.

      +31 vendor frames
  32  artisan:35
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

It looks like all the files I’m expecting are generated:

modules/TestModule
├── Config
│   └── config.php
├── Console
├── Database
│   ├── factories
│   ├── migrations
│   └── seeds
├── Http
│   ├── Controllers
│   │   ├── Admin
│   │   │   └── AdminController.php
│   │   ├── Api
│   │   │   └── ApiController.php
│   │   └── Frontend
│   │       └── IndexController.php
│   ├── Middleware
│   ├── Requests
│   └── Routes
│       ├── admin.php
│       ├── api.php
│       └── web.php
├── Listeners
│   └── TestEventListener.php
├── Models
├── Providers
│   ├── AppServiceProvider.php
│   ├── EventServiceProvider.php
│   └── RouteServiceProvider.php
├── Resources
│   ├── assets
│   ├── lang
│   └── views
│       ├── admin
│       │   └── index.blade.php
│       ├── index.blade.php
│       └── layouts
│           ├── admin.blade.php
│           └── frontend.blade.php
├── composer.json
├── module.json
└── tests

This is what my config looks like; I’m generating some extra files and scaffolding:

<?php

use Nwidart\Modules\Activators\FileActivator;

return [
    'namespace' => 'Modules',
    'stubs'     => [
        'enabled' => true,
        'path'    => resource_path().'/stubs/modules',
        'files'   => [
            'routes'                 => 'Http/Routes/web.php',
            'routes-api'             => 'Http/Routes/api.php',
            'routes-admin'           => 'Http/Routes/admin.php',
            'app-provider'           => 'Providers/AppServiceProvider.php',
            'event-service-provider' => 'Providers/EventServiceProvider.php',
            'route-provider'         => 'Providers/RouteServiceProvider.php',
            'views/index'            => 'Resources/views/index.blade.php',
            'views/index-admin'      => 'Resources/views/admin/index.blade.php',
            'views/frontend'         => 'Resources/views/layouts/frontend.blade.php',
            'views/admin'            => 'Resources/views/layouts/admin.blade.php',
            'listener-test'          => 'Listeners/TestEventListener.php',
            'controller'             => 'Http/Controllers/Frontend/IndexController.php',
            'controller-api'         => 'Http/Controllers/Api/ApiController.php',
            'controller-admin'       => 'Http/Controllers/Admin/AdminController.php',
            'config'                 => 'Config/config.php',
            'composer'               => 'composer.json',
        ],
        'replacements' => [
            'start'                  => ['LOWER_NAME', 'ROUTES_LOCATION'],
            'routes'                 => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
            'routes-api'             => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
            'json'                   => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
            'app-provider'           => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
            'event-service-provider' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'CLASS_NAMESPACE'],
            'route-provider'         => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE', 'CLASS_NAMESPACE'],
            'listener-test'          => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
            'views/index'            => ['LOWER_NAME'],
            'views/index-admin'      => ['LOWER_NAME', 'STUDLY_NAME'],
            'views/frontend'         => ['STUDLY_NAME'],
            'views/admin'            => ['STUDLY_NAME'],
            'controller'             => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_NAME'],
            'controller-admin'       => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_NAME'],
            'controller-api'         => ['MODULE_NAMESPACE', 'STUDLY_NAME', 'CLASS_NAMESPACE', 'LOWER_NAME'],
            'config'                 => ['STUDLY_NAME'],
            'composer'               => [
                'LOWER_NAME',
                'STUDLY_NAME',
                'VENDOR',
                'AUTHOR_NAME',
                'AUTHOR_EMAIL',
                'MODULE_NAMESPACE',
            ],
        ],
        'gitkeep' => false,
    ],
    'paths' => [
        'modules'   => base_path('modules'),
        'assets'    => public_path('modules'),
        'migration' => base_path('database/migrations'),
        'generator' => [
            'config'           => ['path' => 'Config', 'generate' => true],
            'command'          => ['path' => 'Console', 'generate' => true],
            'migration'        => ['path' => 'Database/migrations', 'generate' => true],
            'seeds'            => ['path' => 'Database/seeds', 'generate' => true],
            'factory'          => ['path' => 'Database/factories', 'generate' => true],
            'model'            => ['path' => 'Models', 'generate' => true],
            'controller'       => ['path' => 'Http/Controllers', 'generate' => true],
            'controller-admin' => ['path' => 'Http/Controllers/Admin', 'generate' => true],
            'controller-api'   => ['path' => 'Http/Controllers/Api', 'generate' => true],
            'filter'           => ['path' => 'Http/Middleware', 'generate' => true],
            'request'          => ['path' => 'Http/Requests', 'generate' => true],
            'routes'           => ['path' => 'Http/Routes', 'generate' => true],
            'provider'         => ['path' => 'Providers', 'generate' => true],
            'assets'           => ['path' => 'Resources/assets', 'generate' => true],
            'lang'             => ['path' => 'Resources/lang', 'generate' => true],
            'views'            => ['path' => 'Resources/views', 'generate' => true],
            'test'             => ['path' => 'tests', 'generate' => true],
            'repository'       => ['path' => 'Repositories', 'generate' => false],
            'event'            => ['path' => 'Events', 'generate' => false],
            'listener'         => ['path' => 'Listeners', 'generate' => true],
            'policies'         => ['path' => 'Policies', 'generate' => false],
            'rules'            => ['path' => 'Rules', 'generate' => false],
            'jobs'             => ['path' => 'Jobs', 'generate' => false],
            'emails'           => ['path' => 'Resources/Emails', 'generate' => false],
            'notifications'    => ['path' => 'Notifications', 'generate' => false],
            'resource'         => ['path' => 'Models/Transformers', 'generate' => false],
        ],
    ],
    /*
    |--------------------------------------------------------------------------
    | Scan Path
    |--------------------------------------------------------------------------
    |
    | Here you define which folder will be scanned. By default will scan vendor
    | directory. This is useful if you host the package in packagist website.
    |
    */

    'scan' => [
        'enabled' => false,
        'paths'   => [
            base_path('vendor/*/*'),
            base_path('modules/*'),
        ],
    ],
    /*
    |--------------------------------------------------------------------------
    | Composer File Template
    |--------------------------------------------------------------------------
    |
    | Here is the config for composer.json file, generated by this package
    |
    */

    'composer' => [
        'vendor' => '',
        'author' => [
            'name'  => '',
            'email' => '',
        ],
    ],
    /*
    |--------------------------------------------------------------------------
    | Caching
    |--------------------------------------------------------------------------
    |
    | Here is the config for setting up caching feature.
    |
    */
    'cache' => [
        'enabled'  => true,
        'key'      => 'phpvms-modules',
        'lifetime' => 10,
    ],
    /*
    |--------------------------------------------------------------------------
    | Choose what laravel-modules will register as custom namespaces.
    | Setting one to false will require you to register that part
    | in your own Service Provider class.
    |--------------------------------------------------------------------------
    */
    'register' => [
        'translations' => true,
    ],

    'activator'  => 'file',
    'activators' => [
        'file' => [
            'class'          => FileActivator::class,
            'statuses-file'  => config_path('modules_statuses.json'),
            'cache-key'      => 'activator.installed',
            'cache-lifetime' => 604800,
        ],
    ],
];

I’m trying to debug with some people who are running into issues with generating modules; it looks like the service provider (TestModuleServiceProvider in this case wasn’t generated). And it looks also like the caches (config, routes) didn’t get cleared (I can’t remember if this was supposed to be the case). It could also be that I’m missing some configuration or something in the upgrade to Laravel 7, but I haven’t seen anything specific). Thanks!

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 28 (7 by maintainers)

Commits related to this issue

Most upvoted comments

Ah yes I understand. Please let me know if the issue persists in the future!

Hm that’s weird. First thing I would do is to publish the config again using the --force flag, clear all caches, run composer dump-autoload, and make sure you ran the migrate command.