2017-05-07 72 views
1

要构建一个包含大量动态数据的边栏,我学习了Laravel中的视图作曲家。问题在于View Composer在视图加载时触发,并将控制器中的任何数据覆盖为具有相同名称的变量。根据Laravel 5.4的文档,我通过视图创作者实现了我想要的功能:如何在Laravel中使控制器数据覆盖视图控制器?

查看创建者与查看作曲者非常相似;然而,在视图实例化之后立即执行 ,而不是等待 ,直到视图即将呈现。要注册视图创建,使用 创作者方法:

据我所知,这意味着如果我加载与控制器和创作者的同名变量,控制器应覆盖它。然而,这并没有发生在我的代码中。视图作曲家:

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可变的,例如,总是保留来自创建者的值,而不是被覆盖来自控制器的人。任何想法这里有什么错误?

回答

0

经过一番研究,我意识到我最初的假设,即来自视图创建者的数据可能会被来自控制器的数据覆盖错误。创建者仍然会在控制器之后加载。但我找到了一个简单的解决方案

对于那些想要使用View作曲家/创作者获取可以被覆盖的默认数据的人,可以在作曲者/创作者的boot()方法末尾,在控制器和composer/creator数据之间进行数组合并,就像所以:

$with = array_merge(compact('userCompanies', 'currentCompany', 'currentUser'), $view->getData()); 
      $view->with($with);