在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式:

return view('以.分隔的视图模板路径');

我们将在这篇教程中具体讨论视图实现技术。

视图是 MVC 模式中的 View 部分,大部分视图都应该是 HTML 格式文本,在 Laravel 中,支持三种格式的视图文件解析:CSS 文件,原生 PHP 和 Blade 模板。从文件名扩展就可以区分它们,CSS 文件后缀是 .css,通过文件引擎解析,原生 PHP 文件后缀是 .php,通过 PHP 引擎解析,Blade 模板文件后缀是 .blade.php,通过 Blade 引擎解析(底层实现逻辑可参考 vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php 中的 registerEngineResolver 方法)。

Laravel 在解析视图时是通过实时解析文件后缀名再调用相应的引擎进行处理的,视图文件位于 resources/views 目录下,对于多级子目录以「.」号分隔,并且引用时不带文件后缀名。我们可以定义三个路由进行简单的测试:

// php
Route::get('user/{id?}', function ($id = 1) {
return view('user.profile', ['id' => $id]);
})->name('user.profile'); // blade
Route::get('page/{id}', function ($id) {
return view('page.show', ['id' => $id]);
})->where('id', '[0-9]+'); // css
Route::get('page/css', function () {
return view('page.style');
});

然后在 resources/views 目录下创建 user/profile.php 文件:

用户ID: <?php echo $id;?>

在 resources/views 目录下创建 page/show.blade.php 文件:

页面ID: {{ $id }}

最后在 resources/views 目录下创建 page/style.css 文件:

body {
background: gray;
}

当我们按照路由在浏览器中查看返回视图时,都可以正常解析。在实际开发过程中,我们大多会使用 Blade 模板,因为其提供了丰富的语法从而简化了视图文件的编写。

视图返回与参数传递

Laravel 提供了多个语法糖在路由中返回视图,如辅助函数 view 或 View::make 方法,还可以注入 Illuminate\View\View Factory 类(最底层实现),通常我们使用辅助函数 view,因为最简洁:

// 使用 view 辅助函数
Route::get('/', function () {
// 该函数会在 resources/views 目录下查找 home.blade.php 或 home.php 视图文件,
// 加载文件内容并解析 PHP 变量或语句,然后传递给响应,最终呈现给用户
return view('home');
});

如果要传递数据给视图,可以这么做(多个数据以数组方式传递),这样就可以将 tasks 数据变量传递到视图以便在视图中进行引用:

return view('home')->with('tasks', Task::all());

还可以这么做:

return view('home', ['tasks' => Task:all()]);

推荐使用后者,因为简单。

在视图间共享变量

有时候在不同视图间传递同一个数据变量很麻烦,是否可以做到一次定义,多处使用呢?答案是可以,通过视图对象提供的 share 方法即可实现,我们可以在某个服务提供者如 AppServiceProvider 的 boot 方法中定义共享的视图变量:

view()->share('siteName', 'Laravel学院');
view()->share('siteUrl', 'https://laravelacademy.org');

然后就可以在各个视图中使用 $siteName 和 $siteUrl 这两个变量了(其它变量定义方式类似),而无需每次传递这个数据变量,比如我们在不修改路由定义的前提下修改上述 resources/views/page/show.blade.php 文件:

页面ID: {{ $id }}
<hr>
By <a href="{{ $siteUrl }}">{{ $siteName }}</a>

这样,在浏览器中访问 http://blog.test/page/111,就能看到如下输出了:

对于那些位于页头、页尾、面包屑或导航条中的数据变量,使用共享变量的方式定义将会很方便。

注:更多关于视图的使用可以参考官方文档

laravel 视图的更多相关文章

  1. 填一个laravel视图缓存没有及时更新的坑

    1.此坑背景 laravel在渲染blade模板后,会将渲染好的结果存到storage/framework/views(默认路径,也可在配置中修改的)中,以便下次使用.但我最近总是发现修改了blade ...

  2. laravel视图$errors为空

    最近用laravel5.2的validator时,完全参考手册操作,结果控制器$validator->errors()->all()正常显示错误信息,$validator->fail ...

  3. laravel 视图组件

    假设有一个文件被多个视图需要,比如导航条: 1.在路由文件添加 View::composer('stats', function($view){ $view->with('stats', app ...

  4. laravel 视图与传参

    1:先建立好一个控制器HgjController,其中index方法 return  view('hgj'); 2: 建立视图 在resources/views/hgj.blad.php <ht ...

  5. Laravel 视图调用model方法

    首先控制器 model 视图

  6. 在laravel视图中直接使用{{ csrf_token() }}被翻译成英文显示的处理方法

    在表单中加一个input框在放入{{ csrf_token() }}就可以了: 方法如下: <input type="hidden" name="_token&qu ...

  7. laravel 视图调用方法并传递参数

    视图层 route 中文 路由 <a href="{{route('cc',array('id'=>11111))}}">446454</a> 路由层 ...

  8. Laravel 视图中的url

    <a href="{{ url('url') }}">url</a> <a href="{{ action('StudentControll ...

  9. laravel 视图流程控制,if switch for loop

    流程控制 除了模板继承和数据显示之外,Blade 还为常用的 PHP 流程控制提供了便利操作,例如条件语句和循环,这些快捷操作提供了一个干净.简单的方式来处理 PHP 的流程控制,同时保持和 PHP ...

随机推荐

  1. Linq中的left join

    left join var custs = from c in db.T_Customer join u in db.Sys_User on c.OwnerId equals u.Id into te ...

  2. linux switch 跳转到 ”跳转至 case 标号“ 的错误

    参考链接:  http://blog.csdn.net/qustdjx/article/details/8636489

  3. 【blog】谷歌浏览器如何设置编码

    解释 55.0.2883.75 版本之后的chrome的更多工具菜单项里就没有编码设置了,理由据说是使用率比较低,促进网页编码规范.google 真是脑抽了,普通用户也许很少遇到默认编码错误显示出现乱 ...

  4. 转:Java项目开发规范参考

    Java项目开发规范参考 - KevinLee的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/u011383131/article/details/51227860 ...

  5. 解决Nginx出现403 forbidden

    在之前我修改了nginx.conf,所以/home/ftpuser/www文件夹下应该有index.html或index.htm文件 将index.html或index.htm文件复制到/home/f ...

  6. 给你的Linux系统上点stress【转】

    转自:https://blog.csdn.net/sunvince/article/details/7187768 from: http://blog.yufeng.info/archives/202 ...

  7. python 指定日期图片文件删除

    手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...

  8. js模板引擎-art-template常用总结(转)

    原文:https://www.cnblogs.com/shiyou00/p/6841801.html art-template javascript 模板引擎,官网:https://github.co ...

  9. 日期控件datepicker的使用

    引入JS: <script type="text/javascript" src="static/my/js/bootstrap-datepicker.min.js ...

  10. Alpha 冲刺 (2/10)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:拿快递也不能耽搁了软工 团队部分 后敬甲(组长) 过去两天完成了哪些任务 文字描述 github代码管理规范 商家端订单 ...