Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Crud Generator Laravel Package

dextak/crud-generator

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require dextak/crud-generator
    

    Publish the config file:

    php artisan vendor:publish --provider="Dextak\CrudGenerator\CrudGeneratorServiceProvider" --tag="config"
    
  2. Generate a Basic CRUD Run the generator command with a model name (e.g., User):

    php artisan crud:generate User
    

    This creates:

    • A controller (app/Http/Controllers/UserController.php)
    • Views (resources/views/user/)
    • Routes (routes/web.php)
  3. First Use Case

    • Access the generated CRUD at /user (or your configured route).
    • Test CRUD operations (Create, Read, Update, Delete) via the UI.

Where to Look First

  • Config File: config/crud-generator.php – Customize default settings (e.g., view paths, form fields).
  • Generator Command: php artisan crud:generate – Check available options (--fields, --no-view, --force).
  • Blade Templates: vendor/dextak/crud-generator/resources/views/ – Override or extend default templates.

Implementation Patterns

1. Customizing Fields

Use the --fields option to define fields dynamically:

php artisan crud:generate Post --fields="title:text,content:textarea,published:boolean"
  • Dynamic Fields: Override the getFields() method in a custom generator class.
  • Field Types: Supports text, textarea, select, checkbox, date, etc.

2. Extending the Generator

Create a custom generator by extending Dextak\CrudGenerator\Generators\CrudGenerator:

php artisan make:generator CustomCrudGenerator

Override methods like:

  • generateController()
  • generateView()
  • generateRoute()

3. Integration with Existing Code

  • Reuse Controllers: Generate a CRUD and manually extend the controller for custom logic.
  • Partial Overrides: Override only specific views (e.g., edit.blade.php) without regenerating everything.
  • API CRUDs: Use --api flag to generate API-only controllers (e.g., php artisan crud:generate Product --api).

4. Workflow for Large Projects

  1. Generate Base CRUD:
    php artisan crud:generate Article
    
  2. Customize Views:
    • Copy resources/views/article/ to a custom location.
    • Extend templates with @include or @stack.
  3. Add Business Logic:
    • Extend ArticleController with custom methods.
    • Use middleware or policies for authorization.

5. Multi-Tenant or Scoped CRUDs

  • Filter Fields: Add a scope() method to the generator to inject tenant IDs or filters.
  • Route Scoping: Use route model binding with custom resolvers.

Gotchas and Tips

Pitfalls

  1. Overwriting Existing Files

    • Use --force carefully; it regenerates files without backup.
    • Fix: Backup app/Http/Controllers/ and resources/views/ before running.
  2. Namespace Conflicts

    • If your app uses custom namespaces, ensure the generator respects them.
    • Fix: Override getNamespace() in a custom generator.
  3. View Template Caching

    • Changes to Blade templates may not reflect immediately due to caching.
    • Fix: Clear views:
      php artisan view:clear
      
  4. Route Conflicts

    • Default routes may clash with existing ones (e.g., /user).
    • Fix: Customize routes in generateRoute() or manually adjust routes/web.php.
  5. Database Migrations

    • The generator does not create migrations.
    • Fix: Run php artisan make:migration separately or use a package like laravel-shift/database-generator.

Debugging Tips

  • Check Generator Logs: Run with -v for verbose output:
    php artisan crud:generate User -v
    
  • Inspect Generated Code: Diff the output against vendor/dextak/crud-generator to identify issues.
  • Test Incrementally: Generate one component at a time (e.g., --no-view to skip views).

Extension Points

  1. Custom Field Types

    • Extend Dextak\CrudGenerator\Fields\Field to add new input types (e.g., rich text editors).
    • Example:
      class RichTextField extends Field {
          public function render() { ... }
      }
      
  2. Hooks for Post-Generation

    • Use Laravel’s generated:crud event to run post-processing:
      // In EventServiceProvider
      protected $listen = [
          'generated:crud' => ['App\Listeners\PostCrudGenerate'],
      ];
      
  3. Dynamic Route Names

    • Override getRouteName() to customize route prefixes (e.g., /admin/users).
  4. Localization Support

    • Extend the generator to support localized views by overriding getViewPath().

Performance Considerations

  • Avoid Regenerating Frequently: Use --no-view for development to skip view regeneration.
  • Cache Views: Enable Laravel’s view caching in production for generated CRUDs.

Config Quirks

  • Default Values: The config file (config/crud-generator.php) controls:
    • Default view paths.
    • Form field types.
    • Route naming conventions.
  • Override Globally: Publish and modify the config to change defaults for all CRUDs.

Pro Tips

  • Use for Prototyping: Quickly scaffold CRUDs to validate requirements before full development.
  • Combine with Laravel Mix: Customize generated assets (CSS/JS) by extending the generator’s asset pipeline.
  • Document Customizations: Add comments in generated files to track modifications:
    // Custom logic added by [YourName] on [Date]
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui