Laravel-视图与blade模版
程序员文章站
2022-03-25 17:02:02
...
学习笔记,持续更新
提取网页公共部分
视图一般放在resources/views/
,命名规范:xxxx.blade
.php。
局部视图可使用 _
下划线作为前缀区分,例如_nav.blade.php
1.通用视图
在resources/views/layouts
创建default
,让其他子页面继承
<!-- 其他HTML代码 --!>
@yield('content')
<!-- /其他html代码--!>
@yield('')
可以理解为占位符,可理解为该占位区域用于显示content
区块的内容,子页面可通过继承父页面布局然后填充内容。
2.模版继承
创建home.blade.php
并继承default.blade.php
@extends('layouts.default')
@section('content')
<!--自定义html内容--!>
@stop
使用了@extends
并通过传参来继承了父页面layouts/default.blade.php'
的视图模版
@extends('layouts.default')
下方的@section
和@stop
代码是用来填充父视图default
的('content')
区块。所有在@section
和@stop
的代码都讲被插入到父视图content
区块
@section('content')
<!--自定义html内容--!>
@stop
在Laravel对home.blade.php
编译后,实际结果如下
@extends('layouts.default')
@section('content')
<h1>主页</h1>
@stop
------------------------
↓↓↓↓↓编译后↓↓↓↓↓
------------------------
<!DOCTYPE html>
<html>
<head>
<title>Sample App</title>
</head>
<body>
<h1>主页</h1>
</body>
</html>
3.标题自定义
在default
父视图的<title>
中添加@yield('title','自定义标题名称')
<!DOCTYPE html>
<html>
<head>
<title>@yield('title', 'Sample')</title>
</head>
<body>
@yield('content')
</body>
</html>
我们给@yield
传了2个参数,第一个参数是该区块的变量名称,第二个参数是默认值,表示当指定变量的值为空时,使用Sample
作为默认
子视图继承后,引入@section('title','自定义标题名称')
即可使用
@extends('layouts.default')
@section('title','主页') #引用:第一个参数是父模版的参数,第二个参数可自定义,若没有填写则默认使用父模版默认
@section('content')
<h1>主页??</h1>
@stop
4.引入局部视图
通过传参一个具体的文件路径引入视图,常用语 header/nav/footer/sidebar等。
@include('layouts._header')
//可附带参数,将数据传入到局部视图中
//控制器响应视图->视图接收和传输数据->局部视图再引入
@include('shared._user_info',['users'=>$user])
此外还有其他局部视图组件
-
errors
验证码的引入 -
_users_info
头像信息 - 还有很多,后续补
5.blade模版语法
1.{{变量或变量返回值为一个函数}}
使用 blade
模版输出为{{$name}}
//原生php
<?php echo $name; ?>
2,{{$name or 'default'}}
题外
用户个人主页title
建议使用用户名
[email protected]场景:管理员删除用户
- 表中需要有is_admin字段,默认为false
- 如果运行数据填充,在
Seeder
文件中为指定用户添加为管理员,然后重置数据库执行填充 - 在
Policy
中定义destroy(自定义名字)
,如果此前没有在AuthServiceProvider
中定义模型与策略类关联,需要前往设置。- 形参接收两个参数,当前登录用户实例与进行授权的用户实例
- 判断当前用户实例是否为管理员 && 当前用户ID不能为自身id(管理员不能删除自己)
- 在控制器中引入
$this->authorize('destroy',$user)
授权策略 - 视图中使用
@can('destroy',$user)
类似if,若当前登录用户满足策略中的条件时,显示delete
方法- 提交删除资料的表单,
form
中引入RESTful
中的删除方法{{method_field('DELETE')}}
- 提交删除资料的表单,
推荐阅读