Search code examples
phplaravellaravel-routinglaravel-5.7php-7.2

Laravel Parameter in every url


I have read almost everything in web and documentation but i can't find solution for my Problem.

I have a variable stored in Session , then I want to put this variable in every url generated by route('some-route') .

In Session I have sub = "mysubid"

When I generate Route route('my-route') I want to pass this sub parameter in query string: http://domain.dom/my-route-parameter?sub=mysubid

Can you help me to solve This problem? Any helpful answer will be appreciated;


Solution

  • You can use the Default Values feature.

    First create a new middleware php artisan make:middleware SetSubIdFromSession. Then do the following:

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\URL;
    
    class SetSubIdFromSession
    {
        public function handle($request, Closure $next)
        {
            URL::defaults(['sub' => \Session::get('sub')]);
    
            return $next($request);
        } 
    }
    

    At the end register your new middleware in app/Http/Kernel.php by adding it to $routeMiddleware.

    protected $routeMiddleware = [
       // other Middlewares
       'sessionDefaultValue' => App\Http\Middleware\SetSubIdFromSession::class,
    ];
    

    Add {sub} and the middleware to your route definition:

    Route::get('/{sub}/path', function () {  
       //
    })
    ->name('my-route')
    ->middleware('sessionDefaultValue');
    

    Since you want this on every web route you can also add the middleware to the web middleware group:

    protected $middlewareGroups = [
        'web' => [
            // other Middlewares
            'sessionDefaultValue',
        ],
    
        'api' => [
            //
        ] 
    ];