【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');
}

相关推荐
荻酷社区2 小时前
子比主题美化 – 添加天气教程
php
2401_857622663 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
小鹿( ﹡ˆoˆ﹡ )5 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
XKSYA(小巢校长)7 小时前
NatGo我的世界联机篇
开发语言·php
lxp1997418 小时前
php函数积累
开发语言·php
ac-er888810 小时前
PHP“===”的意义
开发语言·php
wxin_VXbishe10 小时前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php
小小不董10 小时前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
豆豆11 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
NiNg_1_23412 小时前
ThinkPHP5基础入门
php