Php 每个url中的Laravel参数
我已经阅读了几乎所有的网页和文档,但我找不到解决问题的方法 我在Php 每个url中的Laravel参数,php,laravel,laravel-routing,laravel-5.7,php-7.2,Php,Laravel,Laravel Routing,Laravel 5.7,Php 7.2,我已经阅读了几乎所有的网页和文档,但我找不到解决问题的方法 我在会话中存储了一个变量,然后我想把这个变量放在路由('some-route')生成的每个url中 在会话中我有sub=“mysubid” 当我生成RouteRoute('my-Route')时,我想在查询字符串中传递这个sub参数:http://domain.dom/my-route-parameter?sub=mysubid 你能帮我解决这个问题吗?任何有帮助的回答都将不胜感激 您可以使用默认值功能 首先创建一个新的中间件php a
会话
中存储了一个变量,然后我想把这个变量放在路由('some-route')
生成的每个url中
在会话中
我有sub=“mysubid”
当我生成RouteRoute('my-Route')
时,我想在查询字符串中传递这个sub
参数:http://domain.dom/my-route-parameter?sub=mysubid
你能帮我解决这个问题吗?任何有帮助的回答都将不胜感激 您可以使用默认值功能 首先创建一个新的中间件
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);
}
}
将{sub}
和中间件添加到路由定义中:
Route::get('/{sub}/path', function () {
//
})
->name('my-route')
->middleware('sessionDefaultValue');
由于您希望在每个web路由上都使用此功能,因此还可以将中间件添加到web
中间件组:
protected $middlewareGroups = [
'web' => [
// other Middlewares
'sessionDefaultValue',
],
'api' => [
//
]
];
尝试一下,您需要创建中间件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);
}
}
在route.php中添加
Route::group(['middleware' => 'setsubsession'], function(){
//and define all the route you want to add sub parameter
});
使用此选项,您无需更改所有路由。这将自动在该中间件中定义的路由中添加“sub”。我知道我无法传递如下参数:
route('my-route',['sub'=>\Session::get('sub'))
但是我的视图中有太多的路由,无法重构它,我想让它自动运行。为什么要这样做?您已经将该数据存储在会话中。请澄清:您希望所有路由始终具有相同的参数?是的,这是有原因的,也是经理的一个好主意:D@MalkhaziDartsmelidze请注意,我对您的标签进行了一些更新,以显示Laravel 5.7。好主意,但是,我不能用这个代码字符串传递查询字符串的参数,不会出错,但是它不会追加URL查询Laravel的版本吗?我正在使用5.7版本,请考虑这种方法的性能后果。首先,这可能会导致无限循环,它不会检查请求中是否已经设置了sub
,因此它将再次尝试重定向。然后,如果您解决了该问题,每个链接仍将以2个请求结束:没有子项的初始请求,然后是重定向请求。
protected $routeMiddleware = [
........
'setsubsession' => \App\Http\Middleware\SetSubsSession::class,
]
Route::group(['middleware' => 'setsubsession'], function(){
//and define all the route you want to add sub parameter
});