前言

在之前一篇文章中我介绍了通过定义Response宏的方式来实现动态改变模板文件路径以实现主题功能:
laravel实现模板主题功能,但后来我发现这种方法有个弊端,在模板中使用@extends必须显式指定模板路径,这可能造成混乱,我决定还是改变思想,主题和主题之间应该是完全隔离的,不存在就是不存在,不要自动去另外的主题中寻找替代的模板。

本文主要给大家介绍了关于View::first使用Laravel
Blade动态模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

而原来定义response宏的方式可以实现,但我决定使用更加规范的方法。

bet36365注册送奖金 1

laravel的View类里有一个方法 View::addNamespace
,这个方法在手册”开发扩展包”一节中有提到,不得不说Laravel手册排版逻辑混乱,这个方法说明应当放在”视图”章节才是,题外话就不说了,先来说说这个方法吧。

当创建动态组件或者页面的时候,有时候我们想当自定义模版存在的时候展示它,否则展示默认的模版。

laravel渲染视图有一种写法:

例如,当我们创建页面模块的时候,通常需要给“关于我们”和“联系我们”自定义模版(如展示照片或者联系表单),而“我们的服务”则可以使用默认模板。

复制代码 代码如下:

我们可以通过一系列的 if 判断或者使用 view()->exists()
来判断自定义模板是否存在,然而,Laravel 5.5
为我们带来了一个更加优雅的方法来实现这个功能。

View::make(‘namespace::path’);
//例如 View::make(‘default::index.index’);

View::first 的使用

如何定义namespace呢,就是通过这个方法啦:

view()->first()方法可以使我们把下面的代码

复制代码 代码如下:

if (view()->exists('custom-template')) {
 return view('custom-template', $data);
}

return view('default-template', $data);

View::addNamespace(‘default’,app_path().’/views/default’);

替换为更加简洁的版本:

聪明的朋友可能已经感觉到了,这个功能可以助我们实现模板主题化,比如:

return view()->first(
  ['custom-template', 'default-template'], $data
);

复制代码 代码如下:

必须给这个方法的第一个参数传递一个数组,当第一个存在的时候,就将使用它。

bet36365注册送奖金,//注册蓝色主题
View::addNamespace(‘blue’,app_path().’/views/blue’);
//注册红色主题
View::addNamespace(‘red’,app_path().’/views/red’);
//注册绿色主题
View::addNamespace(‘green’,app_path().’/views/green’);

当然,你可以传递任意个数的模版,你甚至还可以使用动态名称:

之后调用:

return view()->first([
  "pages/{$page->slug}",
  "pages/category-{$page->category->slug}",
  "pages/default-template"
], $data);

复制代码 代码如下:

此外,你还可以通过 Facade 版本的这个功能:

//渲染绿色主题下的index.index模板
View::make(‘green::index.index’);

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图