Laravel学习记录--laravel模板

2022-09-14 14:43:44 浏览数 (1)

Laravel模板 resources/views

模板后缀: 模板名以php结尾 在模板中需使用 php原生解析变量 模板名blade.php结尾 直接使用{{变量}}即可 如果有xx.php 和 xxb.lade.php两个同名模板,优先使用blade模板 laravel 方法名不需要与模板名对应

展示模板

代码语言:javascript复制
    1. return view('模板名',参数)
     传递一维数组,模板直接调用数组元素
    2.return view('模板名',['data'=>$data]);
    传递二维数组
   3.return view('模板名',compact('data'))
     等同于第二种方法,这里不需要加变量符号

模板间共享数据

有些时候在不同视图间传递相同变量较为麻烦,在这里我们可以通过视图对象提供的share方法实现数据共享

AppServiceProviderboot方法中定义视图共享变量

代码语言:javascript复制
view()->share('test','Hello Word');

在boot方法中定义后,即可在其他视图使用test变量

blade模板使用标签 判断语句 @if(条件语句)

代码语言:javascript复制
 执行语句 

@elseif(条件语句)

代码语言:javascript复制
 执行语句 
 @else 
 执行语句 
@endif 

@endunless

判断变量是否存在 @isset(变量)

代码语言:javascript复制
执行语句 

@endisset

判断变量是否为空 @empty(变量) 执行语句 @endempty

switch 语句 @switch(…) @case(….) …. @break ….. @default … @endswitch 2.循环语句 a.@foreach($data as $v)

代码语言:javascript复制
 ..... 

@endforeach

代码语言:javascript复制
b.@forelse($data as $v)
   ....
@empty
  ....值为空时执行语句
@endforelse

模板使用php原生代码

代码语言:javascript复制
@php


@endphp

模板判断用户是否登录

代码语言:javascript复制
@auth
//用户已经登录
@endauth
@guest
//用户没有登录
@endguest

模板引用 @include(模板名)引入子模板 问题引入: 当页面大部分内容都一样,只有其中一小块区域要发生改变时,这时候使用include还能满足需求吗? 显然不能! 这时候可以使用laravel的模板继承,类似于面向对象的思想,子模板继承父模板,同时子模板可对父模板的“方法”进行重写 使用方法:

1. section 父模板中要变化的地方键入

代码语言:javascript复制
 @section(name)
 
 @show

子模板继承

代码语言:javascript复制
@extends('父模板名')
 @section('父模板的section_name')
   这里键入重写内容
@endsection

下面举个简单例子

代码语言:javascript复制
<h1>父模板原有内容</h1>
    <ul>
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>


    <h1>继承</h1>
    @section('con')
    <p>this is parent</p>
    @show

    //父模板con区域中 显示父模板原有内容“this is parent”
```php
代码语言:javascript复制
//----------------子模板--------------------------
@extends('parent')//继承父模板parent
@section('con')//重写con区域
<h2>子模板修改内容</h2>
@endsection

效果图

子模板对父模板的con区域进行了重写,并且没有显示父模板原有的“this is parent” ,如果我们想显示父模板的内容使用@parent即可

2.@yield yield相对于一个占位符

代码语言:javascript复制
<h1>@yield('zan')</h1>

子模板

代码语言:javascript复制
@extends('parent')
@section('zan','子模板内容')

或者

代码语言:javascript复制
@extends('parent')
@section('zan')
<i>子模板<i>
@endsection

section于yield的区别简谈 @yield类似于占位符 @section类似于存储区域 ,使用@section子模板可以调用父模板的内容 组件与插槽 组件:网页中的一些元素,会页面多次出现,但其结构相同只是内容不同 这时候可以将其单独写出一个模板文件方便在各个地方都能调用,这个文件就是组件

插槽:组件中留出的内容占位符 定义组件 如:error.blade.php

代码语言:javascript复制
  <div>
    <div class='error'>{{$插槽名}}</div>
    $slot是组件默认插槽,没有指定插槽的数据将被插入到$slot中
    <div class='default'>{{$slot}}</div>
   </div>

调用组件

代码语言:javascript复制
@component('组件名')
   @slot('插槽名')
     {{-- 插槽内容...... --}}
   @endslot
   {{-- 未定义插槽内容存储到$slot中 --}}
@endcomponent

模板中

代码语言:javascript复制
   @{{input}}//在双大括号前加@表示不解析变量
    {!!input!!}://不将{内的代码转义}
    {{-- 注释内容 --}}

0 人点赞