Files
bhoza-shift-manager/src/app/Modules/README.md
2026-03-09 09:18:21 +00:00

2.6 KiB

Module System

This Laravel application uses a modular architecture to organize features into self-contained modules.

Creating a New Module

Use the artisan command to scaffold a complete module:

php artisan make:module ProductCatalog

This creates:

  • Model: app/Modules/ProductCatalog/Models/ProductCatalog.php
  • Controller: app/Modules/ProductCatalog/Controllers/ProductCatalogController.php
  • Routes: app/Modules/ProductCatalog/routes.php
  • Views: app/Modules/ProductCatalog/Views/
  • Migration: database/migrations/YYYY_MM_DD_HHMMSS_create_product_catalogs_table.php
  • Filament Resource: app/Filament/Resources/ProductCatalogResource.php
  • Tests: tests/Modules/ProductCatalog/ProductCatalogTest.php

Module Structure

app/Modules/
└── ProductCatalog/
    ├── Models/
    │   └── ProductCatalog.php
    ├── Controllers/
    │   └── ProductCatalogController.php
    ├── Views/
    │   ├── index.blade.php
    │   ├── create.blade.php
    │   ├── edit.blade.php
    │   └── show.blade.php
    └── routes.php

Registering Module Routes

After creating a module, register its routes in routes/web.php:

require __DIR__.'/../app/Modules/ProductCatalog/routes.php';

Module Features

Each module includes:

CRUD Operations - Full Create, Read, Update, Delete functionality Authentication - Routes protected by auth middleware Filament Admin - Auto-generated admin panel resource Blade Views - Responsive Tailwind CSS templates Tests - Pest test suite for module functionality Permissions - Ready for role-based access control

Example Usage

# Create an Inventory module
php artisan make:module Inventory

# Run migrations
php artisan migrate

# Register routes in routes/web.php
require __DIR__.'/../app/Modules/Inventory/routes.php';

# Access at: http://localhost:8080/inventory
# Admin panel: http://localhost:8080/admin/inventories

Adding Permissions

To add module-specific permissions:

// In database/seeders/RolePermissionSeeder.php
$permissions = [
    'inventory.view',
    'inventory.create',
    'inventory.edit',
    'inventory.delete',
];

Best Practices

  1. Keep modules self-contained - Each module should be independent
  2. Use namespaces - Follow the App\Modules\{ModuleName} pattern
  3. Test your modules - Run php artisan test after creating
  4. Document changes - Update module README if you modify structure
  5. Use Filament - Leverage the admin panel for quick CRUD interfaces