将变量添加到所有路线

时间:2019-05-28 12:51:50

标签: laravel url

我需要显示一个变量(取自用户模型)到我的应用程序中的所有路由,这对它所显示的路由没有影响。因此,主页/变量将显示相同的主页,而不管该变量对所有用户而言。如果用户只是转到myapp / home,则变量会将其自身附加为myapp / home / variable。

我已经在web.php中的下面有了我想要的结果,但是我必须对每条路由都执行此操作,因此,如果我的应用有两个页面,则对/ home和/ example都执行相同的重定向。这也意味着,每当我从另一个控制器重定向时,都必须添加变量。

Route::get( '/example',function(){   
    $var  = Auth::user()->thevariable;
    return redirect('example/'.$var);
}); 
Route::get( 'example/{var}','ExampleController@index');

// changes the url from example, to example/variable, and also returns
the correct controller / view if directed to example/variable.

在我的控制器中,我需要执行以下操作来重定向:

return redirect()->action('HomeController@index',$user->thevariable)
//I can also just redirect to the /home url and the variable is added 
automatically, but this messes up passing session data.

使用作曲家,中间件甚至通过RouteServiceProvider可以做得更好吗?如果有人能指出我正确的方向,那将不胜感激(laravel 5.4)。

1 个答案:

答案 0 :(得分:1)

到目前为止,我的知识:如果要使用不同的路径,则需要记下“路由”中的每个路径。但是,选择哪个决定,将由中间件完成。因此,您可以创建自己的中间件,并使用->middleware('myOwnMW');将其附加到所有这些路径。它应该像:

<?php

namespace App\Http\Middleware;

use Closure;

class myOwnMW
{

public function handle($request, Closure $next)
{
    if (Auth::user()->thevariable) {
        //redirect to your path
        $uri = $request->path() . '/'. $variableIwantToAttach;
        return redirect($uri);
    }

    return $next($request);
}
}

希望您能明白。在此处查看path。不要忘记在Kernel.php内注册中间件,这是我前一段时间使用的tutorial