Laravel 5.6 从中间件向视图传递变量

9 浏览
0 Comments

Laravel 5.6 从中间件向视图传递变量

是否有一种方法可以通过中间件将变量传递到视图中?我之前使用会话成功实现了这一点,但这并没有解决我的问题,所以我现在想问一下是否有其他方法。

0
0 Comments

问题:如何从中间件将变量传递给视图?

原因:中间件无法直接将变量传递给视图,需要通过请求(request)来传递。

解决方法:

1. 在中间件中定义变量并将其合并到请求中:

public function handle($request, Closure $next)
{
    $foo = 'bar';
    $request->merge(compact('foo'));
    return $next($request);
}

2. 在控制器中读取请求中的变量,并将其传递给视图:

public function create(Request $request)
{
    $foo = $request->foo;
    return view('my.view', compact('foo'));
}

3. 在视图中使用该变量:

{{ $foo }}

通过以上步骤,我们可以在中间件中定义变量,并通过请求和控制器将其传递给视图,从而实现将变量传递给视图的目的。

0
0 Comments

问题出现的原因是在Laravel 5.6中,无法直接从中间件(middleware)传递变量给视图(view)。解决方法是使用view()->share()方法将变量共享给视图。

在Laravel 5.6中,如果想要在视图中访问中间件中的变量,直接在中间件中传递变量给视图是行不通的。但是可以通过使用view()->share()方法来共享变量给视图。

使用以下代码,可以轻松在视图中访问数据:

view()->share('my_variable', $variable);

现在你可以在视图中使用{{$my_variable}}来访问该变量了。

0
0 Comments

问题的出现原因是用户想要将动态数据传递给所有视图,但是对于使用中间件还是服务提供者存在疑惑。解决方法是使用服务提供者。

在Laravel中,中间件用于修改请求。如果你有一些在每个视图中都使用的动态数据,最好使用服务提供者而不是中间件。例如,你可能在每个页面上都有一些元数据,每个视图都包含一个名为`header.blade.php`的文件,内容可能如下所示:


    

然后,你可以创建一个服务提供者,在其中进行数据库和缓存的请求,将数据传递给视图。你可以像下面这样编写服务提供者:

public function boot()
{
    view()->composer('view', function ($view) {
        $slug = request()->path();
        $meta = \MetaTags::where('slug' ,'=',$slug)->first();
        $view->with('metatag', $meta->tag);
    });
}

你还可以参考Laracast上的教程,了解更多关于服务提供者的信息。

最后,根据提问者提供的链接,有人建议使用中间件来解决问题。但在这种情况下,我们仍然建议使用服务提供者来实现动态数据的传递。

希望这些信息能对你有所帮助!

0