Laravel之模板继承、不解析模板和防xss攻击

1、模板继承
<!-- 继承parent模板 -->
@extends('parent')

<!-- 修改它的left属性 -->
@section('left')
	<h1>这是模板继承</h1>

@endsection


子类
<!-- 继承parent模板 -->
@extends('parent')

<!-- 修改它的内容 -->
@section('content','Blade之继承')

@parent
<!-- 修改它的left属性 -->
@section('left')
	<h1>这是模板继承</h1>

@endsection

@section('right')
	<p class="text-danger">万般皆是命,半点不由人</p>
@endsection

父类
<body class="container">
	<h1>@yield('content')</h1>
	<div>
		<div class="left">
			<ul>
				<!-- 声明一个属性 -->
				@section('left')
					sssssss
				<!-- 方法 -->
				@show
			</ul>
		</div>

		<div class="right">
			<ol>
				@yield('right')
			</ol>
		</div>
	</div>
</body>
2、文档
#### 8.4 模板包含与继承
包含:
@include('msg.sub') 包含views 下的msg/sub.blade.php
继承:
模板继承比模板包含更强大.
如下 , 一个典型的网页结构
头部和尾部都一样 , 就中间的左右内容不一样.
-------------

include 模板来做 , 是把头尾拿出来header , footer;
然后@include('header') , @include('footer'),需要@include 两次 ;
而继承则是把header/footer 公共框架写在父模板中,继承一次父模板.
模板继承的概念和面向对象的继承非常相似,看下例:
<!-- 父模板 parent.blase.php -->
<html>
<head>
<title>Hello , @yield('title')</title>
</head>
<body>
<div>
@section('right')
<h3><p>this is parent's body,please rewrite it!</p></h3>
@show
</div>
<div class="container">
@yield('content')
</div>
</body>
</html>
如你所见,该文件包含了典型的 HTML 语法。不过,请注意 @Section 和 @yield 命令。顾名思义,@Section 命令定义了视图的一部分内容,而
@yield 指令是用来显示指定部分的内容。
父模板定义right方法,字模板继承right并重写方法
在这里@yield只是占位的作用
<!-- 子模板 child.blade.php-->
@extends('parent')
@section('title','MrChi Blog')
@section('right')
<h2><p>this is mrchi's blog,thanks to give me a active!</p></h2>
@endsection
@section('content')
<p>hello mrchi:I want to tell you ,this is my country!</p>
@endsection
根据面向对象的知识,子模板的同名方法覆盖父类方法.
同时,子类right 方法中引用的父类方法.
组件&插槽
组件和插槽给内容片段(section)和布局(layout)带来了方便,不过,有些人可能会发现组件和插槽的模型更容易理解。首先,我们假设有一个可复
用的“alert”组件,我们想要在整个应用中都可以复用它:
//alert.blade.php
<div class="alert alert-danger">
<div class="alert-title">{{ $title }}</div>
{{ $slot }}
</div>
{{ $slot }} 变量包含了我们想要注入组件的内容,现在,要构建这个组件,我们可以使用 Blade 指令 @component:
//使用组件
@component('alert')
@slot('title')
Forbidden
@endslot
You are not allowed to access this resource!
@endcomponent
8.5 不解析模板和防xss攻击
在一些前端模板引擎中 , 也有可能用{{}} 做标签边界,
为防止blade 模板去解析 , 前面加@ 符号阻止解析 .: @{{$jsvar}}XSS 攻击:
['code'=>'<script>alert(1)</script>']
输出到 view 层,看源码:
&lt;script&gt;alert(1)&lt;/script&gt;
如果确实不需要实体转义 , 可以在变量两边 加 !! (1个大括号,不是两个);
例 : {!!$code!!}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值