Laravel Blade 动态模版 & View::first
当构建动态组件或页面时,可能会根据不同的需求显示自定义模板(如果存在)或以其他方式返回默认模板。
例如,假设我们正在构建一个页面模块,有一些页面如「关于我们」或「联系我们」,需要一个自定义模板(例如显示图片或联系人表单),而其他页面类似「服务条款」 则是需要默认的视图模板。
通常,我们会通过一系列条件判断来解决这个问题,或者通过使用 view()->exists()
来检查自定义模板是否存在。而现在,Laravel 5.5 给了我们一个更好、更优雅的方式来解决这个问题。(以下内容你也可以通过 视频 了解到)
使用 View::first
如果使用 view()->exists()
方法,你的代码可能要这样写:
if (view()->exists('custom-template')) {
return view('custom-template', $data);
}
return view('default-template', $data);
现在我们换成更简单、更具可读性的 View::first
方法:
return view()->first(
['custom-template', 'default-template'], $data
);
在上面的方法中,你必须传递一个模板数组作为第一个参数,该方法会加载它找到的数组中的第一个模板。
你可以传递大量模板,甚至使用动态名称:
return view()->first([
"pages/{$page->slug}",
"pages/category-{$page->category->slug}",
"pages/default-template"
], $data);
你也可以使用这个功能的 Facade :
\View::first($templates, $data)
这种动态视图加载功能已经被添加到 Laravel v5.5 中的 Blade 模版中,让处理动态模板的代码更优雅。
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 7年前 加精
其实我想问 你这文章的 Banner 怎么弄的
@GhostCoder sketch
@莫扎特 淡定,大佬们通常一目十行,知道有这个东西就好了。
@JokerLinly 感谢:smile:
:bowtie:
:smile:
@JokerLinly 看来有UI 功底啊
@莫扎特 点赞=收藏
请问一下,我看到上面的例子有多个blade,但是返回的数据都是$data。如果我每个blade对应数据都一样,怎么办?就像这样
return view()->first(
['view0', 'view1','view2'], $data0,$data1,$data2
);
可以吗?
@Complicated 目测不行