【Laravel】Laravel框架中的视图

视图

在前面的开发中,程序的运行结果都是通过在控制器中使用return 语句返回一个字符串,或使用dump()函数来实现的。为了更好地输出一个HTML页面,可以利用视图来实现。

一、创建视图文件

Laravel的视图文件可以是一个普通的.php文件,也可以是基于Laravel内置的Blade模板引擎编写的.blade.php文件

  1. xxx.blade.php 表示使用Blade模板引擎,支持模板语法和PHP原生语法。

    {{ $title }}<?php echo $title; ?>

  2. xxx.php 表示不使用模板引擎,只支持PHP原生语法。

    注:如果存在同名的".blade.php"和".php"文件时,优先使用前者

视图文件保存在`resources\view`目录中,用户也可以在该目录下创建子目录,将不同模块的视图放在不同的子目录中

1.1 操作

  1. 新建shop.blade.php视图文件

  2. 新建一个控制器

    cmd 复制代码
    php artisan make:controller Shop/ShopController
    php 复制代码
     public function shop()
        {
            return view('shop');
            //view('shop') === /resources/views/shop.blade.php
        }
  3. 添加路由

    php 复制代码
    //  视图路由
    Route::get('shop/index','Shop\ShopController@shop');
  4. 访问http://127.0.0.1/shop/index

1.2 视图文件夹路径

如果是views下面的文件夹里面的内容

视图名称前添加路径:两种写法都用于加载resources\views\home\test\show.blade.php

  1. 方法一

    php 复制代码
    public function shop()
    {
        return view('shome\test\shop');
    }
  2. 方法二

    php 复制代码
    public function shop() 
    { 
        return view('home.test.shop'); 
    }

二、向视图传递数据

  1. 在视图文件中并不能直接访问控制器中的变量,而是需要在控制器中为视图传递数据。

  2. 使用view()函数或with()函数可以为视图传递数据。

php 复制代码
// 方式1:通过view()函数的第2个参数传递数据
return view(模板文件, 数组);
// 方式2:通过with()函数传递数据
return view(模板文件)->with(数组);
// 方式3:通过连续调用with()函数传递数据
return view(模板文件)->with(名称, 值)->with(名称, 值)...

操作

TestController

php 复制代码
public function show()
{
    $data = [
        'content' => '文本内容'
    ];
    return view('show', $data);
}

show.blade.php

php 复制代码
<body>
  {{ $content }}
</body>

三、视图数据处理

3.1.特殊字符转义

Blade模板引擎在输出字符串时,会自动进行HTML特殊字符的转义。

TestController

php 复制代码
public function show() 
{
    return view('shop.index.shop')->with('content','<b>加粗文字</b>');
}

如果禁止Blade自动转义,在变量输出时使用{!! $content !!}

show.blade.php

php 复制代码
<body>
  {!! $content !!}
</body>

3.2. 通过函数对数据进行处理

在视图中输出数据时,可以通过函数来对数据进行处理

TestController

php 复制代码
public function show() 
{
    return view('shop.index.shop')->with('time',time());
}

show.blade.php

php 复制代码
<body>
   当前时间为 {{ date('Y-m-d H:i:s', $time) }}
</body>

四、循环判断操作

在页面中,需要进行循环、判断操作

4.1 循环操作

  1. 在视图中输出数组时,需要对数组进行遍历,此时可以通过"@foreach"模板语法来实现。该语法类似PHP 中的foreach 语句。

    php 复制代码
    @foreach ($variable as $key => $value)
    
    // 循环体
    
    @endforeach
  2. 操作

    控制器

    php 复制代码
    public function show()
    {
        $data = [['id' => 1, 'name' => 'Tom'], ['id' => 2, 'name' => 'Andy']];
        return view('show', ['data' => $data]);
    }

    视图文件

    php 复制代码
    <body>
      <h1>循环操作</h1>
      @foreach ($data as $v)
        {{ $v['id'] }} - {{ $v['name'] }} <br>
      @endforeach
    </body>

4.2 判断操作

  1. 在视图文件中还可以使用"@if"模板语法进行判断操作,该语法类似PHP 中的if 语句。

    php 复制代码
    @if (条件表达式1)
    
    // 语句1
    
    @elseif (条件表达式2)
    
    // 语句2
    
    @elseif (条件表达式3)
    
    // 语句3
    
    ......
    
    @else
    
    // 以上条件都不满足时执行的语句
    
    @endif
  2. 在TestController的show()方法中使用date()函数获取当前是星期几,将获取结果传给视图

    控制器文件

    php 复制代码
        public function shop()
        {
            $week =date('N');
            return view('shop.index.shop',['week'=>$week]);
        }

    视图文件

    php 复制代码
    <body>
        <h1>判断操作</h1>
        今天是:
        @if ($week==1)
        星期一
        @elseif ($week==2)
        星期二
        @elseif ($week==3)
        星期三
        @elseif ($week==4)
        星期四
        @elseif ($week==5)
        星期五
        @elseif ($week==6)
        星期六
        @elseif ($week==7)
        星期天
        @endif
    </body>

五、模板的继承与包含

一个网站由多个页面组成,而多个页面可能会有一些公共的部分,这些公共部分的代码是重复的。为了防止代码重复,可以通过模板继承、模板包含两种方式将公共代码拆分到单独的视图文件中。

5.1 模板继承

模板继承是指将一个完整页面中的公共部分放在父页面中,将不同的部分放在不同的子页面中,子页面可以继承父页面来获得完整的页面

语法

  • "@yield()"用于在父页面中定义一个区块,其参数是区块的名称,表示将子页面中对应的内容显示在此区块中。

  • "@extends('需要继承的父页面') )"用于在子页面中继承父页面。

  • "@section('区块名称')"用于在子页面中定义区块内容。

父页面

php 复制代码
  <body>
    <header>头部区域</header>
    <div>
      @yield('content')
    </div>
    <footer>尾部区域</footer>
  </body>

子页面

php 复制代码
<body>
    @extends('parent')
    @section('content')
      <section>我的区块</section>
    @endsection
  </body>

控制器

php 复制代码
public function show()
{
    return view('child');  //子页面
}

别忘了控制器的路由哦!

5.2 模板包含

把多个页面中相同的部分抽取到子页面中,然后通过@include()将公共部分包含进来,得到完整的页面。

主页面

php 复制代码
  <body>
    @include('header')
    <div>内容区域</div>
    @include('footer')
  </body>

头部区域文件resources\views\header.blade.php

html 复制代码
<body>
    <header>头部区域</header>
</body>

尾部区域文件resources\views\footer.blade.php

html 复制代码
<body>
    <footer>尾部区域</footer>
</body>

控制器

php 复制代码
public function show()
{
    return view('main');
}

相关推荐
IpdataCloud11 小时前
远程办公网络安全中,IP查询工具如何保障数据安全?适用场景与落地指南
tcp/ip·web安全·php
xingpanvip11 小时前
星盘接口开发文档:天象盘接口指南
android·开发语言·python·php·lua
liulian091612 小时前
【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 离线模式实现:让你的应用无网也能萌萌哒~
开发语言·flutter·华为·php·学习方法·harmonyos
a8a30212 小时前
Laravel 8.x核心特性全面解析
php·laravel
深邃-13 小时前
【Web安全】-Kali,Linux配置(2):Java环境配置,Python环境配置,Conda使用,PIP配置使用,SSH远程登录
java·linux·python·安全·web安全·网络安全·php
2401_8734794013 小时前
遭遇DDoS攻击后如何快速分析攻击源?用IP查询+离线库定位异常IP
服务器·开发语言·tcp/ip·php
niucloud-admin1 天前
PHP V6 单商户常见问题——如何修改访问域名默认跳转端口
php
catchadmin1 天前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
郑州光合科技余经理1 天前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
niucloud-admin1 天前
PHP V6 单商户常见问题——在线升级版本失败后如何回退版本数据
php