【问题标题】:Laravel: passing a variable to multiple viewsLaravel:将变量传递给多个视图
【发布时间】:2016-12-19 11:03:22
【问题描述】:

我想动态地制作菜单,因此显示“本月的电影”而不是显示“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);

任何想法将不胜感激

更新

终于有办法了:

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

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

【问题讨论】:

  • 我知道这不是您期望的答案,但是.. sublimetext.com :)
  • @everytimeicob 或者他可以购买 PHPStorm 许可证,用于版本控制、远程 FTP、SFTP、开发环境中的终端访问和完整的开发支持(自动完成等......)
  • @Disfigure 是的,我同意 MMB

标签: laravel


【解决方案1】:

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

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

Docs

【讨论】:

  • 我试图理解它是什么意思,但我不知道如何在我的解决方案中使用它。什么是关键?什么是价值?我需要将每个月(1 月、2 月 ..)动态变化的变量 $month 传递到所有视图中。
【解决方案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;

希望这行得通!

【讨论】:

  • 我使用了这个解决方案,用这个改变了 $var = 'value" 这一行 -> "$var = Carbon::now()->format('F');" 因为我想要值是动态的。我在顶部添加了使用 Carbon\Carbon,但解决方案给了我一条错误消息:“AppServiceProvider.php 第 26 行中的 FatalErrorException:找不到类 'App\Providers\View'”
  • 它没有用。我收到错误:未定义变量:月份(查看:C:\Users\rra\Documents\Personal\Kino\resources\views\partials_nav.blade.php)。我认为问题在于我试图将变量 $month 传递到所有视图之外的布局中。看图,我更新了问题
  • @RafaelMunoz 我添加了代码,这会将变量传递给视图文件夹中的所有视图。现在它也将传递给扩展布局的视图。
  • 它终于奏效了,但我不得不做出一些改变。查看问题中的更新
  • @FarshidRezaei return view('admin.dashboard', compact('varname'));提醒不要在 compact 方法中使用 $。
【解决方案3】:

另一种方法是使用 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');
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2011-10-01
    • 2019-01-21
    • 2015-01-11
    相关资源
    最近更新 更多