如何从 laravel 中的控制器向部分视图发送数据?
Posted
技术标签:
【中文标题】如何从 laravel 中的控制器向部分视图发送数据?【英文标题】:How do I send data to partial views from controller in 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 可能是一个选项。我会努力回来的。
【问题讨论】:
【参考方案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'))
【讨论】:
以上是关于如何从 laravel 中的控制器向部分视图发送数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 的 Eloquent 向数据库发送数据的问题
如何正确地将数据从 vue 组件发布到 laravel 控制器