如何从laravel中的控制器向部分视图发送数据?

时间:2018-03-16 07:12:12

标签: laravel laravel-blade

我已经从ViewComposer设置导航菜单(请参阅laravel view composers: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可能是一个选项。我会试着回去。

3 个答案:

答案 0 :(得分:0)

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

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

当然,您可能需要为$变量设置默认值,以避免undefined variable error

答案 1 :(得分:0)

您应该处理参数。 例如:

log.js:162 New renderItems_, continuing render pass...

答案 2 :(得分:0)

在您的应用文件夹下,创建一个名为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();
        });
    }

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

view是以下代码:

{{ resolve('keyNameYouDecide') }}

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

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

您在代码中的其他任何地方都可以做:

resolve('keyNameYouDecide'))