[英]How to make the controller data override view controller in Laravel?
为了构建一个包含大量动态数据的侧边栏,我在Laravel中了解了View作曲家。 问题是View Composers在视图加载时触发,覆盖控制器中任何具有相同名称的变量的数据。 根据Laravel 5.4文档,我通过视图创建者实现了我想要的:
视图创作者与视图作曲家非常相似; 但是,它们在实例化视图后立即执行,而不是等到视图即将渲染。 要注册视图创建者,请使用创建者方法:
据我所知,这意味着如果我在控制器和创建者中加载具有相同名称的变量,控制器应该覆盖它。 但是我的代码没有发生这种情况。 视图作曲家:
public function boot()
{
view()->creator('*', function ($view) {
$userCompanies = auth()->user()->company()->get();
$currentCompany = auth()->user()->getCurrentCompany();
$view->with(compact('userCompanies', 'currentCompany'));
});
}
这是一个控制器,例如:
public function name()
{
$currentCompany = (object) ['name' => 'creating', 'id' => '0', 'account_balance' => 'N/A'];
return view('companies.name', compact('currentCompany'));
}
例如,有问题的$ currentCompany变量始终保留创建者的值,而不是被控制器中的值覆盖。 知道这里有什么问题吗?
经过一些研究,我意识到我最初的假设是来自视图创建者的数据可能被来自控制器的数据覆盖是错误的。 创建者仍然以某种方式在控制器之后加载。 但我找到了一个简单的解决方案
对于那些想要使用View composers / creators获取可被覆盖的默认数据的人,请在composer / creator的boot()方法结束时在控制器和composer / creator数据之间进行数组合并,如下所示:
$with = array_merge(compact('userCompanies', 'currentCompany', 'currentUser'), $view->getData());
$view->with($with);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.