teksite/module

a package to create modules for a laravel project

Installs: 28

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/teksite/module

2.0.4 2025-12-16 08:43 UTC

This package is auto-updated.

Last update: 2025-12-16 08:44:49 UTC


README

A robust Laravel package designed to enable modularity, allowing you to organize your application into reusable, self-contained modules with commands similar to Laravel's native artisan commands.

Table of Contents

About

The Modular Laravel Package (teksite/module) brings modularity to Laravel applications, enabling developers to create self-contained modules with their own controllers, models, views, and more. It mirrors Laravel's native artisan commands but prepends module: to distinguish module-specific commands. Modules are stored in the Lareon/Modules directory, which replicates a miniature Laravel structure for each module.

Example

To create a controller in a specific module:

php artisan module:make-controller ExampleController ExampleModule --resource

Author

Developed by Sina Zangiband.

Contact

Installation

Compatibility

Laravel Package
11.x ^1.0
12.x ^2.0

Step 1: Install via Composer

Run the following command in your terminal:

composer require teksite/module

Note on wikimedia/composer-merge-plugin

If prompted with:

Do you trust "wikimedia/composer-merge-plugin" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?] 

Press y and Enter. This plugin is required to merge composer.json files from modules.

Step 2: Register the Service Provider

Note: Laravel 5.5 and above supports auto-discovery, so this step is optional for newer versions.

For Laravel 10 and 11

Add the service provider to bootstrap/providers.php:

<?php

return [
    // Other providers
    Teksite\Module\ModuleServiceProvider::class,
];

For Laravel 5.x and Earlier

Add the service provider to config/app.php under the providers array:

'providers' => [
    // Other Service Providers
    Teksite\Module\ModuleServiceProvider::class,
],

Step 3: Publish Configuration (Optional)

Publish the package's configuration file for customization:

php artisan vendor:publish --provider="Teksite\Module\ModuleServiceProvider"

Step 4: Update Composer.json

To autoload module classes, add the following to your composer.json:

"extra": {
    "laravel": {
        "dont-discover": []
    },
    "merge-plugin": {
        "include": [
            "Lareon/Modules/*/composer.json"
        ]
    }
}

Step 5: Refresh Autoloader

Run the following command to refresh Composer's autoloader:

composer dump-autoload

Usage

Creating a Module

Generate a new module with a structure similar to Laravel's:

php artisan module:make Example

This creates a new module in Lareon/Modules/Example with directories like Controllers, Models, Views, etc.

Module Commands

The package supports Laravel-like artisan commands prefixed with module:. Examples include:

  • Create a controller:
    php artisan module:make-controller ExampleController ExampleModule --resource
  • Create a model:
    php artisan module:make-model ExampleModel ExampleModule --migration
  • Create a middleware:
    php artisan module:make-middleware ExampleMiddleware ExampleModule

Changing Module Priority

To adjust the loading order of modules, modify the bootstrap/modules.php file. Reorder the modules array to prioritize specific modules:

<?php

return [
    'Blog' => [
        'provider' => 'Lareon\\Modules\\Blog\\App\\Providers\\BlogServiceProvider',
        'active' => true,
        'type' => 'lareon',
    ],
    'Page' => [
        'provider' => 'Lareon\\Modules\\Page\\App\\Providers\\PageServiceProvider',
        'active' => true,
        'type' => 'self',
    ],
];

Integration with Lareon

If you use the teksite/lareon package, you can create modules controlled by Lareon using:

php artisan module:make Example --lareon

To switch an existing module between Lareon-controlled (lareon) and self-managed (self), update the type in bootstrap/modules.php:

'Example' => [
    'provider' => 'Lareon\\Modules\\Example\\App\\Providers\\ExampleServiceProvider',
    'active' => true,
    'type' => 'lareon', // or 'self'
],

Warning: Manually changing the type may cause issues. Ensure compatibility when switching.

Credits

License

This package is open-sourced under the MIT License. See the License File for details.

Support

For questions, issues, or feature requests, please reach out via:

Contributions are welcome! Feel free to submit a pull request or open an issue on GitHub.