在实际开发中,除了 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. 【译】第八篇 SQL Server安全数据加密

    本篇文章是SQL Server安全系列的第八篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  2. day 8 - 1 文件操作

    文件操作 注意: 1. r+ 最为常用 2.encoding 的编码格式一定要与文件编码格式一致 读取 r  rb #在本地创建 txt 格式的文件默认使用 gbk 格式 f = open('e:/p ...

  3. RabbitMQ channel 参数详解

    1.Channel 1.1 channel.exchangeDeclare(): type:有direct.fanout.topic三种durable:true.false true:服务器重启会保留 ...

  4. P5238 整数校验器

    题目地址:P5238 整数校验器 显然这道题不算难,细心即可AC 细节见代码中的注释 #include <bits/stdc++.h> #define ll long long using ...

  5. [转]python3之日期和时间

    转自:https://www.cnblogs.com/zhangxinqi/p/7687862.html#_label6 阅读目录 1.python3日期和时间 2.时间元组 3.获取格式化的时间 4 ...

  6. EF使用Fluent API配置映射关系

    定义一个继承自EntityTypeConfiguration<>泛型类的类来定义domain中每个类的数据库配置,在这个自定义类的构造函数中使用我们上次提到的那些方法配置数据库的映射. 映 ...

  7. Spring MVC的核心控制器DispatcherServlet的作用

    关于Spring MVC的核心控制器DispatcherServlet的作用,以下说法错误的是(  )? 它负责接收HTTP请求 加载配置文件 实现业务操作 初始化上下应用对象ApplicationC ...

  8. input修改placeholder文字颜色

    少废话,上代码: <style> input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mo ...

  9. WebStorm 关联 TFS(转)

    1.下载插件 TFS integration  2.链接TFS 服务器 3.创建工作区 4. 5.选择一个 工作环境 6.最重要的有点是在VCS里面要选择一个默认的提交方式!!!

  10. iOS post提交数据有嵌套数组的处理方法

    2017年11月21日17:11:43 解决办法, 修改iOS框架里的代码: http://www.jianshu.com/p/130daa0c2fe7 确实有效, 要不然,  内层的每一个键值对都会 ...