覆盖view()-控制器方法中的共享键


Overwrite view()->share key in controller method?

假设我们在AppServiceProvider中有这样的内容

$page = [ 
   'title' => 'Page Name',
   'info'  => 'Content Here'
];
view()->share('page', $page);
在视图:

<h1>{{$page['title']}}</h1>
<p>{{$page['info']}}</p>

如果我想在方法控制器中覆盖$page['title'],我已经尝试过这样:

public function index()
 {
    $page['title'] = "overwrite title only";
    return view('index', compact('page'));
 }

问题是$page['info']将不再可用,它将不存在于视图中。我该如何克服这种情况?

最简单的解决方案可能是在控制器中替换:

$page['title'] = "overwrite title only";

:

$page = array_merge(
    view()->shared('page'), 
    ['title' => "overwrite title only"]
);

view()->shared()方法返回共享变量,然后我们可以覆盖一些数组元素并将覆盖的数组传递给视图。