Weave 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

Routing Bundle Laravel Package

doppy/routing-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require doppy/routing-bundle
    

    Add to config/app.php under providers:

    Doppy\RoutingBundle\RoutingServiceProvider::class,
    
  2. First Use Case: Route Grouping Define a route group in routes/web.php:

    use Doppy\RoutingBundle\Routing;
    
    Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function () {
        Routing::group(['prefix' => 'users'], function () {
            Route::get('/', 'UserController@index');
            Route::post('/create', 'UserController@store');
        });
    });
    
    • Key: The Routing facade simplifies nested route grouping with cleaner syntax.

Implementation Patterns

1. Dynamic Route Prefixes

Useful for multi-tenant or locale-based routing:

$tenantId = Auth::user()->tenant_id;
Routing::group(['prefix' => "tenant/{$tenantId}"], function () {
    Route::get('/dashboard', 'DashboardController@show');
});

2. Middleware Stacking

Combine middleware with route groups:

Routing::group([
    'prefix' => 'api/v1',
    'middleware' => ['throttle:60', 'api.auth']
], function () {
    Route::get('/posts', 'PostController@index');
});

3. Controller-Based Routing

Attach routes to controllers dynamically:

class AdminController extends Controller {
    public function routes() {
        return [
            'get.index' => ['path' => '/dashboard', 'as' => 'admin.dashboard'],
            'post.store' => ['path' => '/create', 'as' => 'admin.create']
        ];
    }
}

Register in a service provider:

public function boot() {
    Routing::registerControllerRoutes(AdminController::class);
}

4. API Resource Routing

Generate RESTful routes for resources:

Routing::resource('posts', 'PostController')
    ->only(['index', 'store'])
    ->middleware('auth:admin');

Gotchas and Tips

Pitfalls

  1. Facade vs. Direct Usage

    • The Routing facade is a wrapper around Laravel’s Route service. Overusing it may obscure Laravel’s native features (e.g., Route::prefix()).
    • Fix: Use the facade for grouping logic; fall back to Route:: for complex cases.
  2. Route Caching Conflicts

    • Dynamic prefixes (e.g., {tenantId}) break route caching. Exclude dynamic groups from caching:
      Route::group(['prefix' => 'dynamic'], function () {
          // ...
      })->where('tenantId', '[0-9]+')->ignoreRouteCache();
      
  3. Controller Route Registration

    • Ensure routes() method in controllers returns an array with valid keys (get.index, post.store). Invalid keys throw silent errors.
    • Debug: Use dd(Routing::getRegisteredRoutes(AdminController::class)) to verify.

Tips

  1. Extend the Facade Add custom methods to the Routing facade for project-specific needs:

    // In a service provider:
    Facades\Routing::extend('api', function () {
        return new class {
            public function group($callback) {
                return Route::prefix('api/v2')->group($callback);
            }
        };
    });
    

    Usage:

    Routing::api()->group(function () { ... });
    
  2. Debugging Route Groups Dump the compiled route list to inspect groups:

    dd(Route::getRoutes()->getByName());
    
  3. Performance

    • For large applications, prefer Route::group() for simple cases to avoid facade overhead.
    • Use Routing::group() only when nesting exceeds 3 levels (improves readability).
  4. Integration with Laravel Scout Dynamically generate search routes:

    Routing::group(['prefix' => 'search'], function () {
        Route::get('/{model}', 'SearchController@index')
            ->where('model', implode('|', ['posts', 'users']));
    });
    
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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums