Laravel 5.6传递变量以从中间件查看

时间:2018-05-19 11:43:28

标签: php laravel laravel-blade

有没有办法将变量传递给具有中间件的视图?
我能够通过会话来做到这一点,但这并没有解决我的问题,所以我要求这个。

4 个答案:

答案 0 :(得分:0)

您可以将变量合并到请求中,从控制器上的请求中读取它,然后将其传递给视图。

例如,在中间件中:

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

    return $next($request);
}

在控制器上:

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

然后在视图上,您​​可以将其引用为,例如{{ $foo }}

答案 1 :(得分:0)

中间件用于修改请求。

如果每个视图都有一些动态数据,那么最好使用服务提供商而不是中间件。

例如,您可能在每个页面上都有一些元数据,并且每个视图都包含一个header.blade.php,看起来像这样:

<head> <meta name="{{$meta_key}}" content="{{$meta_desc}}"> </head>

然后您可以创建一个service provider

 public function boot()
 {
    view()->composer('view', function () {
          // compute $meta_key and $meta_desc from slug 
         $view->with('meta_key', $meta_key)->with('meta_desc', $meta_desc);
    });
 }

您也可以从laracast

查看本教程

答案 2 :(得分:0)

按要发送数据的路径替换composer中的“视图”

即如果要发送到partials文件夹中的header.blade.php,则将“ view”替换为“ partials.header”。

在引用@adam answerLaracasts episode 25之后,以下代码对我有用:

\ app \ Providers \ AppServiceProvider.php

boot()函数中添加以下代码:-

 view()->composer('partials.header', function ($view) {
            //

            $view->with('your_key', 'your_value');
        });

现在,您的数据可以在 project_name \ resources \ views \ partials \ header.blade.php 中以

的形式访问
{{$your_key}}

<?php echo $your_key; ?>

答案 3 :(得分:0)

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

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

现在您可以在视图中使用 {{$my_variable}}