欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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])

此外还有其他局部视图组件

  1. errors验证码的引入
  2. _users_info头像信息
  3. 还有很多,后续补

5.blade模版语法

1.{{变量或变量返回值为一个函数}} 使用 blade模版输出为{{$name}}

//原生php
<?php echo $name; ?>

2,{{$name or 'default'}}

题外

用户个人主页title建议使用用户名

[email protected]场景:管理员删除用户
  1. 表中需要有is_admin字段,默认为false
  2. 如果运行数据填充,在Seeder文件中为指定用户添加为管理员,然后重置数据库执行填充
  3. Policy中定义destroy(自定义名字),如果此前没有在AuthServiceProvider中定义模型与策略类关联,需要前往设置。
    1. 形参接收两个参数,当前登录用户实例与进行授权的用户实例
    2. 判断当前用户实例是否为管理员 && 当前用户ID不能为自身id(管理员不能删除自己)
  4. 在控制器中引入$this->authorize('destroy',$user)授权策略
  5. 视图中使用@can('destroy',$user) 类似if,若当前登录用户满足策略中的条件时,显示delete方法
    1. 提交删除资料的表单,form中引入RESTful中的删除方法{{method_field('DELETE')}}
相关标签: 视图