我需要显示一个变量(取自用户模型)到我的应用程序中的所有路由,这对它所显示的路由没有影响。因此,主页/变量将显示相同的主页,而不管该变量对所有用户而言。如果用户只是转到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)。
答案 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);
}
}