我已经阅读了网络和文档中的几乎所有内容,但是找不到解决我问题的方法。
我有一个变量存储在Session
中,然后我想将此变量放入route('some-route')
生成的每个url中。
在Session
中,我有sub = "mysubid"
当我生成路线route('my-route')
时,我想在查询字符串sub
中传递此http://domain.dom/my-route-parameter?sub=mysubid
参数
您能帮我解决这个问题吗?任何有帮助的答案将不胜感激;
答案 0 :(得分:4)
您可以使用默认值功能。
首先创建一个新的中间件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' => [
//
]
];
答案 1 :(得分:1)
尝试此操作,您需要创建中间件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);
}
}
在app / 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”。