Laravel Blade 动态模版 & View::first

file

当构建动态组件或页面时,可能会根据不同的需求显示自定义模板(如果存在)或以其他方式返回默认模板。

例如,假设我们正在构建一个页面模块,有一些页面如「关于我们」或「联系我们」,需要一个自定义模板(例如显示图片或联系人表单),而其他页面类似「服务条款」 则是需要默认的视图模板。

通常,我们会通过一系列条件判断来解决这个问题,或者通过使用 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 模版中,让处理动态模板的代码更优雅。

本文翻译自:https://laravel-news.com/viewfirst

Stay Hungry, Stay Foolish.