每个网址中的Laravel参数

Mal*_*dze 0 php laravel-routing laravel-5 php-7.2 laravel-5.7

我已经阅读了Web和文档中的几乎所有内容,但找不到我的问题的解决方案。

我有一个变量存储在中Session,那么我想将此变量放入由生成的每个url中route('some-route')

Session我有sub = "mysubid"

当我生成Route时,route('my-route')我想sub在查询字符串中传递此参数:http://domain.dom/my-route-parameter?sub=mysubid

您能帮我解决这个问题吗?任何有帮助的答案将不胜感激;

com*_*nse 5

您可以使用默认值功能。

首先创建一个新的中间件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);
    } 
}
Run Code Online (Sandbox Code Playgroud)

最后,app/Http/Kernel.php通过将您的新中间件添加到中来进行注册$routeMiddleware

protected $routeMiddleware = [
   // other Middlewares
   'sessionDefaultValue' => App\Http\Middleware\SetSubIdFromSession::class,
];
Run Code Online (Sandbox Code Playgroud)

{sub}在您的路由定义中添加中间件:

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

由于您希望在每个网络路由上都这样做,因此也可以将中间件添加到web中间件组中:

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

    'api' => [
        //
    ] 
];
Run Code Online (Sandbox Code Playgroud)