每个网址中的Laravel参数

时间:2019-01-09 10:45:01

标签: php laravel-5 laravel-routing laravel-5.7 php-7.2

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

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

Session中,我有sub = "mysubid"

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

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

2 个答案:

答案 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”。