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

Admin Bundle Laravel Package

anh/admin-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require anh/admin-bundle
    

    Add to config/app.php under providers:

    Anh\AdminBundle\AdminBundle::class,
    

    And under aliases:

    'Admin' => Anh\AdminBundle\Facades\Admin::class,
    
  2. Basic Configuration Publish the default config:

    php artisan vendor:publish --provider="Anh\AdminBundle\AdminBundle" --tag="config"
    

    Edit config/admin.php to define your admin routes (e.g., /admin).

  3. First Use Case: CRUD for a Model Create a controller extending Anh\AdminBundle\Controller\AbstractAdminController:

    namespace App\Http\Controllers\Admin;
    
    use Anh\AdminBundle\Controller\AbstractAdminController;
    use App\Models\Post;
    
    class PostController extends AbstractAdminController
    {
        public function model()
        {
            return Post::class;
        }
    }
    

    Register the route in config/admin.php:

    'routes' => [
        'posts' => [
            'path' => '/posts',
            'controller' => App\Http\Controllers\Admin\PostController::class,
        ],
    ],
    

Implementation Patterns

Workflows

  1. Model-Based CRUD Extend AbstractAdminController and override model() to bind to an Eloquent model. The bundle auto-generates:

    • List view (with search/filter)
    • Create/Edit forms (using model fillables)
    • Delete actions
  2. Custom Fields Override fields() to define custom columns in the list view:

    public function fields()
    {
        return [
            'id' => 'ID',
            'title' => 'Title',
            'published_at' => 'Published At',
        ];
    }
    
  3. Form Customization Override formFields() to customize create/edit forms:

    public function formFields()
    {
        return [
            'title' => 'text',
            'content' => 'textarea',
            'published_at' => 'datetime',
        ];
    }
    
  4. Actions Add custom actions (e.g., bulk publish) via actions():

    public function actions()
    {
        return [
            'publish' => [
                'method' => 'POST',
                'label' => 'Publish',
                'icon' => 'fas fa-bullhorn',
                'handler' => [$this, 'handlePublish'],
            ],
        ];
    }
    
  5. Middleware Integration Protect admin routes with middleware (e.g., auth.admin):

    // config/admin.php
    'middleware' => ['auth.admin'],
    
  6. Views Overrides Override default Blade templates by publishing assets:

    php artisan vendor:publish --provider="Anh\AdminBundle\AdminBundle" --tag="views"
    

    Then modify resources/views/admin/....


Integration Tips

  • Laravel Mix/Webpack: Bundle includes basic CSS/JS. Extend with your own assets by publishing and overriding:
    php artisan vendor:publish --provider="Anh\AdminBundle\AdminBundle" --tag="public"
    
  • Authentication: Use Laravel’s built-in auth or integrate with packages like spatie/laravel-permission for role-based access.
  • API Integration: For RESTful APIs, pair with laravel-admin or backpack for advanced features.
  • Localization: Override language files in resources/lang/vendor/admin.

Gotchas and Tips

Pitfalls

  1. Route Conflicts Ensure config/admin.php paths don’t clash with existing routes. Use unique prefixes (e.g., /admin/v1/posts).

  2. Model Requirements The bundle assumes Eloquent models with fillable attributes. For custom logic, override methods like save() or delete().

  3. CSRF Issues Custom actions must include @csrf in Blade templates or use POST methods with Laravel’s built-in protection.

  4. Asset Loading Published assets (CSS/JS) may not auto-reload in development. Clear caches:

    php artisan view:clear
    php artisan cache:clear
    
  5. Database Queries List views use eager loading by default. For complex relationships, override query():

    public function query()
    {
        return $this->model->with(['author', 'category']);
    }
    

Debugging

  • Log Errors: Enable Laravel’s debug mode (APP_DEBUG=true) and check storage/logs/laravel.log.
  • Dump Data: Use dd() or dump() in controller methods to inspect model instances or query results.
  • Check Routes: List admin routes with:
    php artisan route:list | grep admin
    

Extension Points

  1. Custom Controllers Extend AbstractAdminController to add methods like beforeIndex(), beforeStore(), etc.

  2. Dynamic Routes Use route parameters in config/admin.php:

    'posts/{id}' => [
        'controller' => App\Http\Controllers\Admin\PostController::class,
    ],
    
  3. API Endpoints Create separate controllers for API access (e.g., PostApiController) and reuse logic via traits.

  4. Event Listeners Listen to admin events (e.g., admin.model.created) for post-processing:

    // EventServiceProvider
    protected $listen = [
        'admin.model.created' => [
            App\Listeners\LogAdminActivity::class,
        ],
    ];
    
  5. Service Providers Bind custom services to the container for dependency injection in controllers:

    // AppServiceProvider
    $this->app->bind(
        Anh\AdminBundle\Services\CustomService::class,
        App\Services\CustomService::class
    );
    
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.
comsave/common
alecsammon/php-raml-parser
chrome-php/wrench
lendable/composer-license-checker
typhoon/reflection
mesilov/moneyphp-percentage
mike42/gfx-php
bookdown/themes
aura/view
aura/html
aura/cli
povils/phpmnd
nayjest/manipulator
omnipay/tests
psr-mock/http-message-implementation
psr-mock/http-factory-implementation
psr-mock/http-client-implementation
voku/email-check
voku/urlify
rtheunissen/guzzle-log-middleware