2017-06-12 79 views
2

我有一个控制器呈现my_view.blade.php。视图可以访问特定的变量:Laravel:404页面显示时访问原始视图数据

return view()->make('my_view', array('var1' => 'foo', 'var2' => 'bar')); 

现在,让我们使用my_view.blade.php抛出一个404错误说一个页面。在这种情况下,Laravel将为自定义404.blade.php“交换”my_view

当发生这种情况时,显然,视图不知道最初传递的数据。

有什么办法,我可以坚持传递给my_view原始数据,使他们可以在404.blade.php访问?请注意,这些数据可能是动态的,对于每个视图都不相同。

当然,该解决方案将处理投掷404

+1

意见查看数据共享的文档。在这种情况下没有适用的原始视图数据。这不是我想的通用解决方案。 – apokryfos

+0

垃圾,当然,你是对的。我开始放弃(404)',所以数据根本不传递给任何视图。而且,目前还没有办法将数据传递给该方法。 – lesssugar

+0

如果你手动触发'abort',那么你仍然可以在@ian之前执行'view() - > share(...)'(除非你在中间件中触发这个),这个问题通常是当你有一个模型绑定到一个路由,当它不存在时自动触发404。那么你几乎没有运气。 – apokryfos

回答

0

你可以使用view()->share($key, $val)这将分享其中包括在请求中的所有意见的任何页面。

你可以如果你得到一个404错误,那么原来的观点并没有呈现与上Laravel文档

+0

这很好,如果我知道我需要分享什么,如果有一些预先定义的密钥对集。就我而言,我想用(动态呈现的)404视图分享原始视图的数据。我不明白如何使用'share'。 – lesssugar

+0

@lesssugar您可以将keyval数组传递给share方法。你必须知道你想通过什么,否则视图怎么知道..?此时您正在传递var1和var2,因此将其放入数组中并使用上述解决方案。 – Ian

+0

好吧,这就是我的文章的要点:我希望呈现的404视图自动访问与原始视图相同的数据,而不管它是什么。这意味着我确实事先不知道数据。 – lesssugar