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”

当我生成Route
Route('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
 });