Параметр Laravel в каждом URL - PullRequest
0 голосов
/ 09 января 2019

Я прочитал почти все в Интернете и документации, но не могу найти решение своей проблемы.

У меня есть переменная, хранящаяся в Session, затем я хочу поместить эту переменную в каждый URL, сгенерированный route('some-route').

В Session У меня sub = "mysubid"

Когда я генерирую Маршрут route('my-route') Я хочу передать этот sub параметр в строке запроса: http://domain.dom/my-route-parameter?sub=mysubid

Можете ли вы помочь мне решить эту проблему? Любой полезный ответ будет оценен;

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Попробуйте, вам нужно создать промежуточное ПО php artisan make: middleware SetSubSession

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;

class SetSubsSession
{
public function handle($request, Closure $next)
{
    if(session('sub')){
        $url = url()->full();
        return redirect($url.'?sub='.session('sub'));
    }
    return $next($request);
} 
} 

в приложении / http / Kernel.php

 protected $routeMiddleware = [
 ........
 'setsubsession' => \App\Http\Middleware\SetSubsSession::class,
 ]

в route.php добавить

 Route::group(['middleware' => 'setsubsession'], function(){ 
      //and define all the route you want to add sub parameter
 });

при использовании этого вам не нужно изменять все ваши маршруты. Это автоматически добавит «sub» в маршрут, определенный в этом промежуточном программном обеспечении.

0 голосов
/ 09 января 2019

Вы можете использовать функцию значений по умолчанию.

Сначала создайте новое промежуточное ПО php artisan make:middleware SetSubIdFromSession. Затем сделайте следующее:

<?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);
    } 
}

В конце зарегистрируйте ваше новое промежуточное ПО в app/Http/Kernel.php, добавив его в $routeMiddleware.

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

Добавьте {sub} и промежуточное ПО к определению вашего маршрута:

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

Поскольку вы хотите это на каждом веб-маршруте, вы также можете добавить промежуточное ПО в группу промежуточного ПО web:

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

    'api' => [
        //
    ] 
];
...