Laravel:将变量传递给多个视图

时间:2016-12-19 11:03:23

标签: laravel

我想在菜单上进行动态播放,而是展示"本月的电影"它显示" 12月的影片" (见图);是12月是每月更新的当月

我的问题是菜单不属于特定的路由/控制器,因此我无法像其他路由那样传递变量。示例:

    $month = Carbon::now()->format('F');
    return view('partials._nav')
            ->withMonth($month);

我可以解决"将月份传递给所有控制器/路由的问题,但我重复了很多次相同的代码。

我的问题是

1-在Laravel中是否有任何方法可以将变量传递给某种根状态(如Angular中),所以,我保持变量在我的应用程序的所有路径中都可用?

2-有没有办法可以将变量返回到多个视图?所以我只是将变量传递给所有可能的视图,如:

return view('films.all', 'films.show', 'films.index', 'actors.show', 'actors.index')
                ->withMonth($month);

任何想法都将不胜感激

The navigation is outside the scope of views更新

The menu is outside the views scope

最后我有解决方案:

public function boot()
{
    View::composer('*', function ($view) {
        $month = Carbon::now()->format('F');

        $view->withMonth($month);
    });
}

3 个答案:

答案 0 :(得分:3)

您可以使用share()方法将数据共享到多个视图。将以下代码放在boot() App/Providers/AppServiceProvider方法中:

public function boot()
{
    view()->share('key', 'value');
} 

Docs

答案 1 :(得分:2)

您可以使用AppServiceProvider,通过您扩展的布局传递变量。

您的代码将是:

public function boot()
{
    View::composer('*', function ($view) {
        $var = 'value';

        $view->with('var', $var);
    });

    View::composer('*', function ($view) {
        $month = Carbon::now()->format('F');

        $view->withMonth($month);
    });
}

您需要使用以下课程:use Illuminate\Support\Facades\View;

希望这有效!

答案 2 :(得分:0)

另一种方法是使用Laravel Session。 您可以在会话中保存变量值,然后将其保存到任何地方。

 //To Save value in Session
   $month = 'January';
   Session::put('currentMonth', $month);

 //To Get value from Session
   if((Session::has('currentMonth'))) {
       $month_var = Session::get('currentMonth');
    }