Laravel入坑指南(3)——模板
各位小伙伴有缘聚到这里,说明对于Laravel的路由和控制器已经有点了解了。
会写业务逻辑之后,如何把结果漂亮地展示出来,就是我们要解决的问题。(前后端分离的同学,请自动忽略)在MVC的世界里,漂亮的界面叫模板,书面化叫“视图”(这么叫高端一点),翻译成英文就是View,Laravel里也不例外。对于模板的引用,我们有以下两种方法。
方法一:
\Illuminate\Support\Facades\Route::get('/', function () {
return view('welcome');
});
方法二:
\Illuminate\Support\Facades\Route::any('/',"Web\\TestController@action"); //以下是TestController
namespace App\Http\Controllers\Web; use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\View; class TestController extends Controller
{
public function func()
{
return view("welcome",['name'=>'testname']);
}
}
一、模板路径
上面两个例子,分别都是引入了welcome模板。这个welcome的路径是/resources/views/welcome.blade.php。Laravel框架的模板采用的是blade模板引擎,所以模板一定是以.blade.php为扩展。
那么:第一个问题来了,仍然是路径问题。写项目的时候,多数情况下我们不想把模板直接放在/resources/views目录下,想要分门别类进行归类。这时我们可以在views下面建立目录,然后在把模板文件放在这个新目录下面。举个栗子:
模板文件:/resources/views/admin/login.blade.php
引用:
return view("admin/login");
二、模板语法
在探讨模板语法的之前,我们需要把数据从后端传到模板上去。至于怎么传?其实本文上面已经有提到了:
return view("welcome",['name'=>'testname']);
view()函数是第二个参数,是一个数组,key是用在模板上的“变量”,value则是这个"模板变量"的值。这个value可以是各种数据类型,包括数组和类对象。
或者在调用view()函数之前,用以下办法也可以将数据传递给模板:
View::share("key",'value');
1) 普通变量输出
{{$name}}
{{ $o->action() }} //如果传递过来的是一个对象,可以调用对象的成员变量和成员函数
{!! $name !!} //取消PHP在传递过程中调用htmlentities()函数对变量进行过滤
2) 取消blade解析
很多时候,我们不需要blade解析,可以用如下两种方法:
<!-- 方法一 -->
@{{name}} <!-- 方法二 -->
@verbatim
{{$name}}
@endverbatim
方法二适用于大篇幅的JS代码,避免被blade意外解析的时候。
3) 判断
判断是模板中最常见,也是最简单的一个模板语法。看看以下例子就知道怎么用了(在blade中可以调用php函数,这一点很赞噢):
@if(!isset($name))
not set
@elseif($name=="ok")
okok
@else
{!! $name !!}
@endif
4) 循环
for循环:
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}<br />
@endfor
foreach循环:
@foreach($news_list as $news)
{{$news['title']}}--{{$news['user'][0]}}<br />
@endforeach
forelse循环
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
另外,值得一提的是在模板循环中可以使用@continue和@break两个指令来控制循环是否结束。
5) 模板继承
模板继承这个概念,对于只熟悉原生PHP代码的小伙伴来说会比较陌生。其实这也不难理解,它适用于所有的模板几乎都类似,只有页面上的几个部分不一样的场景。 首先要有一个框架模板,我们叫他暂且称呼它为frame;在frame上挖了几个洞;子模板c1、c2、c3......就是为了填充frame挖出的洞,使得一个模板完整。举个简单的例子:
框架模板:frame.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> @section('menu')
菜单
@show @section('nav')
导航:
@show
<br />
<b>内容---@yield('content')</b> </body>
</html>
子模板:content.blade.php
@extends('frame') @section('content')
这是内容--子模板
@endsection @section('nav')
@parent <!-- 这个指令用于“追加” -->
导航HTML
@endsection @section('menu')
菜单HTML
@endsection
我们在代码中引用模板return view("content");即可得到完整的页面
6) inlucde引入子模板
@include('welcome')
这里是在当前模板中引入/resources/views/welcome.blade.php
以上就是这一次Laravel课程,Laravel框架24小时入坑指南,未完,待续:)
大家下期见
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。
Laravel入坑指南(3)——模板的更多相关文章
- electron入坑指南
electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- Elasticsearch入坑指南之RESTful API
Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...
- ElasticSearch入坑指南之概述及安装
---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...
- eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南
eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- Rust入坑指南:鳞次栉比
很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...
- Rust入坑指南:亡羊补牢
如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...
- Rust入坑指南:朝生暮死
今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...
- Rust入坑指南:齐头并进(上)
我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...
随机推荐
- java - 字符串转数字
Integer.valueOf("str").intValue(): Integer.valueOf("123").intValue():
- Spring————IOC入门学习
Spring----入门学习 简介 优点 Spring是一个开源的免费的框架(容器)! Spring是一个轻量级,非入侵式的框架 控制反转(IOC),面向切面编程(AOP) 支持对事务的处理,对框架整 ...
- .NET技术面试题系列(2) -sql server数据库优化规范
1.数据库优化规范 a.索引 每个表格都要求建立主键,主键上不一定需要强制建立聚集索引. 聚集索引,表中存储的数据按照索引的顺序存储,即逻辑顺序决定了表中相应行的物理顺序,因此聚集索引的字段值应是不会 ...
- [转帖]【dperf系列-5】使用dperf进行性能测试(初级)
https://zhuanlan.zhihu.com/p/451341132 dperf是一款高性能的开源网络压力测试仪,是Linux基金会旗下的DPDK官方生态项目.本文介绍如利用dperf在两台物 ...
- Chrome浏览器不同版本兼容性的验证方法
Chrome浏览器不同版本兼容性的验证方法 背景 上周客户现场有出现使用国产信创设备上面的奇安信浏览器出现兼容性的问题. 开发认为是测试不全面导致. 认为测试应该必须测试过特定浏览器才可以进行说明. ...
- [转帖]013 Linux 搞懂「文件所属者更改及权限的赋予」从未如此简单 (chmod、chgrp、chown)
https://my.oschina.net/u/3113381/blog/5435014 01 一图详解「ls -l」 02 两种符号区分表示文件和目录 -(横线) # 表示非目录文件 d # ...
- TypeScript中typeof的简单介绍
简单介绍typeof 我们都知道js提供了typeof,用来获取基本数据的类型. 实际上,TS也提供了 typeof 操作符. 可以在 [类型上下文]中进行类型查询. 只能够进行变量或者属性查询. 定 ...
- 你不知道的Promise构造函数Promise(excutor)
Promise构造函数Promise(excutor) // 说明一下:excutor会在Promise内部立刻同步调用:(异步操作在执行器执行) var p = new Promise((resol ...
- 【JVM】JDK7后intern方法总结
JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈. 测试代码1如下: @Test public void t ...
- Windows XP Professional with Service Pack 3 (x86)
Windows XP Professional with Service Pack 3 (x86) 链接:https://pan.baidu.com/s/1p99vLx5psoq9K4ONlRpkZA ...