laravel 视图
在实际开发中,除了 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 视图的更多相关文章
- 填一个laravel视图缓存没有及时更新的坑
1.此坑背景 laravel在渲染blade模板后,会将渲染好的结果存到storage/framework/views(默认路径,也可在配置中修改的)中,以便下次使用.但我最近总是发现修改了blade ...
- laravel视图$errors为空
最近用laravel5.2的validator时,完全参考手册操作,结果控制器$validator->errors()->all()正常显示错误信息,$validator->fail ...
- laravel 视图组件
假设有一个文件被多个视图需要,比如导航条: 1.在路由文件添加 View::composer('stats', function($view){ $view->with('stats', app ...
- laravel 视图与传参
1:先建立好一个控制器HgjController,其中index方法 return view('hgj'); 2: 建立视图 在resources/views/hgj.blad.php <ht ...
- Laravel 视图调用model方法
首先控制器 model 视图
- 在laravel视图中直接使用{{ csrf_token() }}被翻译成英文显示的处理方法
在表单中加一个input框在放入{{ csrf_token() }}就可以了: 方法如下: <input type="hidden" name="_token&qu ...
- laravel 视图调用方法并传递参数
视图层 route 中文 路由 <a href="{{route('cc',array('id'=>11111))}}">446454</a> 路由层 ...
- Laravel 视图中的url
<a href="{{ url('url') }}">url</a> <a href="{{ action('StudentControll ...
- laravel 视图流程控制,if switch for loop
流程控制 除了模板继承和数据显示之外,Blade 还为常用的 PHP 流程控制提供了便利操作,例如条件语句和循环,这些快捷操作提供了一个干净.简单的方式来处理 PHP 的流程控制,同时保持和 PHP ...
随机推荐
- linux 不允许多线程共享sqlite句柄
参考链接: http://blog.csdn.net/liangzhao_jay/article/details/45642085 sqlite3采用文件锁,效率过低. sqlite3采用的3种线程模 ...
- React多行文本溢出处理(仅针对纯文本)
最多显示4行,第四行末尾显示“...”
- eclipse快捷键调试总结 -转--快捷键大全
(1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2 ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时To ...
- Web方面的错误, 异常来自hresult:0x80070057(E_INVALIDARG)
删除 C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET files 这个文件夹. 解决方法: 1.代码保存频繁一点.做一个 ...
- P4001 [ICPC-Beijing 2006]狼抓兔子
题目地址:P4001 [ICPC-Beijing 2006]狼抓兔子 平面图 边与边只在顶点相交的图. 对偶图 对于一个平面图,都有其对应的对偶图. 平面图被划分出的每一个区域当作对偶图的一个点: 平 ...
- Git学习笔记03-工作区和暂存区
Git和其他版本控制工具不同的地方就是有暂存区的概念 工作区(Working Directory) 就是在电脑界面上能够看到的目录 版本库(Repository) 工作区下面有个一个.git文件夹,也 ...
- 一个漂亮的php验证码类
一个漂亮的php验证码类(分享) 作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下 直接上代码: 复制代码 代码如下: //验证 ...
- Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD
题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...
- VS2013中编译openssl的步骤和使用设置
一.VS2013中编译openssl的步骤 版本号:openssl-1.0.1e 1.下载 OpenSSL http://www.openssl.org/,并解压到d:\openssl-1.0.1e目 ...
- GIT入门文档
集中式(SVN): 集中式版本控制系统,版本库是集中存放在中央服务器的,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器. 集中式版本控制系 ...