dcblogdev/laravel-module-generator

Generate Laravel Modules from a template.

v2.0.6 2025-05-27 07:42 UTC

README

There is a Discord community. https://discord.gg/VYau8hgwrm For quick help, ask questions in the appropriate channel.

Logo

Laravel package for generating Laravel Modules from a template.

Requirements

PHP 8.2+ Laravel Modules package installed https://github.com/nWidart/laravel-modules

Video demo

Intro video

https://www.youtube.com/watch?v=BwYzfb9Fa8A&t=2s

Install

You can install the package via composer:

composer require dcblogdev/laravel-module-generator

Publish both the config and stubs:

php artisan vendor:publish --provider="Dcblogdev\ModuleGenerator\ModuleGeneratorServiceProvider"

This will publish a module-generator.php config file

This contains:

'template' => [
    'Breeze - Blade - CRUD Web & API' => 'stubs/module-generator/breeze-crud-full',
    'Breeze - Blade - CRUD Web only' => 'stubs/module-generator/breeze-crud-web',
    'Breeze - Blade - CRUD API only' => 'stubs/module-generator/breeze-crud-api'
],
'ignore_files' => ['module.json']

By default, the stubs will be located at stubs/module-generator you can add your paths by adding folders and updating the config file.

Usage

php artisan module:build
300550938-529c214d-a02a-4577-8904-c865b2f41f7e

{module?} is the name of the module you want to create. If you don't provide a name you will be asked to enter one.

{template?} is the name of the template you want to use. If you don't provide a name you will be asked to enter one.

php artisan module:build Contacts "Breeze - CRUD API only"

Once a module has been created, enable it:

php artisan module:enable ModuleName

Then run:

composer dump-autoload

Create or update the stubs file. The filename and contents should have placeholders for example ModulesController will be replaced with your name + Controller. ie ContactsController when the command is executed.

Placeholders:

These placeholders are replaced with the name provided when running php artisan module:build

Used in filenames:

Module = Module name ie Contacts

module = Module name in lowercase ie contacts

module_plural = Plural module name in lowercase ie demo becomes demos

Model = Model name ie Contact

model = Model name in lowercase ie contact

Only used inside files:

🟦 Module Placeholders ($name = 'PurchaseOrders')

Placeholder Value
{Module} PurchaseOrders
{Module } Purchase Orders
{Module-} Purchase-Orders
{Module_} Purchase_Orders
{ModuleCamel} purchaseOrders
{ModuleStudly} PurchaseOrders
{ModuleTitle} Purchase Orders
{module} purchaseorders
{module } purchase orders
{module-} purchase-orders
{module_} purchase_orders
{moduleCamel} purchaseOrders
{moduleStudly} PurchaseOrders
{modulePlural} purchase orders
{module_plural} purchase orders
{module_plural_snake} purchase_orders
{module_plural_kebab} purchase-orders
{module_title} Purchase Orders

🟩 Model Placeholders ($model = 'PurchaseOrder')

Placeholder Value
{Model} PurchaseOrder
{Model } Purchase Order
{Model-} Purchase-Order
{Model_} Purchase_Order
{ModelCamel} purchaseOrder
{ModelStudly} PurchaseOrder
{ModelTitle} Purchase Order
{model} purchaseorder
{model } purchase order
{model-} purchase-order
{model_} purchase_order
{modelCamel} purchaseOrder
{modelStudly} PurchaseOrder
{model_plural} purchase orders
{model_plural_snake} purchase_orders
{model_plural_kebab} purchase-orders
{model_title} Purchase Order

Contributing

Contributions are welcome and will be fully credited.

Contributions are accepted via Pull Requests on Github.

Pull Requests

  • Document any change in behaviour - Make sure the readme.md and any other relevant documentation are kept up-to-date.

  • Consider our release cycle - We try to follow SemVer v2.0.0. Randomly breaking public APIs is not an option.

  • One pull request per feature - If you want to do more than one thing, send multiple pull requests.

Security

If you discover any security related issues, please email dave@dcblog.dev email instead of using the issue tracker.

License

license. Please see the license file for more information.