【问题标题】:How do I send data to partial views from controller in laravel?如何从 laravel 中的控制器向部分视图发送数据?
【发布时间】:2018-03-16 07:12:12
【问题描述】:

我已经从 ViewComposer 设置了我的导航菜单(请参阅 laravel 视图作曲家:https://laravel.com/docs/5.6/views#view-composers),就像这样

View::composer('partials.nav', function ($view) {
            $view->with('menu', Nav::all());
        });

我需要的是从一些控制器中设置哪个导航项处于活动状态,即“当前部分”。

问题

如何从某些控制器向“partials.nav”发送变量,例如currentNavItem

我是否将其与返回视图的其余变量一起发送?

喜欢

return view('page.blade.php",$viewVariables + $optionalVariablesForPartialsViews);

看起来很垃圾

旁注

  • 我使用 laravel 5.6

稍后编辑

看起来Laravel 5.1 : Passing Data to View Composer 可能是一个选项。我会努力回来的。

【问题讨论】:

    标签: laravel laravel-blade


    【解决方案1】:

    因为您要发送的$variable 在不同控制器的操作中有所不同,所以您需要指定$variable

    return view('page.blade.php",$viewVariables,$variablesForPartialsViews);
    

    当然你可能需要为 $variable 设置一个默认值以避免undefined variable error

    【讨论】:

      【解决方案2】:

      您应该处理参数。 例如:

      public function compose(View $view)
      {
          $view->with('page', $this->getPage());
      }
      
      public function getPage()
      {
          $viewVariables = 2;
          $optionalVariablesForPartialsViews = 1;
          return $viewVariables + $optionalVariablesForPartialsViews;
      }
      

      【讨论】:

      • 你在什么类上有这些方法?在 ViewComposer 类上?如何从 Controller 向 Composer 发送数据?
      【解决方案3】:

      在您的应用文件夹下创建一个名为 yourClassNameFacade 的类。你的课看起来像这样。

      class yourClassNameFacade extends Facade
      {
          protected static function getFacadeAccessor()
          {
              return 'keyNameYouDecide';
          }
      }
      

      然后到文件app/Providers/AppServiceProvider.php中添加注册函数

      public function register()
          {
              $this->app->bind('keyNameYouDecide', function (){
                  //below your logic, in my case a call to the eloquent database model to retrieve all items.
                  //but you can return whatever you want and its available in your whole application.
                  return \App\MyEloquentClassName::all();
              });
          }
      

      然后在您的视图或您希望在应用程序中的任何其他位置执行此操作以引用它。

      查看是以下代码:

      {{ resolve('keyNameYouDecide') }}
      

      如果您想检查其中的内容,请执行以下操作:

      {{ ddd(resolve('keyNameYouDecide')) }}
      

      您可以在代码中的任何其他地方执行以下操作:

      resolve('keyNameYouDecide'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-06
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 2020-08-26
        • 2021-03-25
        相关资源
        最近更新 更多