Lavavel-blade 模板

Blade 视图文件使用 .blade.php 文件扩展名,并且一般被存放在 resources/views目录。

1.[模板继承]

<!-- Stored in resources/views/layouts/master.blade.php -->

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

@section指令正像其名字所暗示的一样是用来定义一个视图片断(section)的;
@yield指令是用来展示某个指定 section 所代表的内容的。
扩展一个页面布局模板

<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')
    @@parent

    <p>This is appended to the master sidebar.</p>
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

2.[展示数据]

Route::get('greeting', function () {
    return view('welcome', ['name' => 'Samantha']);
});
//展示
Hello, {{ $name }}.
//显示函数
The current UNIX timestamp is {{ time() }}.

判断是否有值

{{ isset($name) ? $name : 'Default' }}
//或者
{{ $name or 'Default' }}

默认情况下,Blade 的 {{ }} 表达式会自动通过 PHP 的 htmlentities 函数进行处理,以防止 XSS 攻击。如果你不希望自己的数据被转义,请使用如下语法:

Hello, {!! $name !!}.

3.控制结构

通过 @if、@elseif、@else和 @endif 指令可以创建 if 表达式。这些指令其实都有相对应的 PHP 表达式:

if表达式

@if (count($records) === 1)
    I have one record!
@elseif (count($records) > 1)
    I have multiple records!
@else
    I don't have any records!
@endif
@unless (Auth::check())
    You are not signed in.
@endunless

循环

@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

@foreach ($users as $user)
    <p>This is user {{ $user->id }}</p>
@endforeach

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>No users</p>
@endforelse

@while (true)
    <p>I'm looping forever.</p>
@endwhile

引入子视图

<div>
    @include('shared.errors')

    <form>
        <!-- Form Contents -->
    </form>
</div>
//可以传参
@include('view.name', ['some' => 'data'])

迭代一个视图
@each('view.name', $jobs, 'job')
第一个参数是视图名字,第二个是数组,第三是数组中的一个元素
第四个参数是如果为空的时候显示的视图
@each('view.name', $jobs, 'job', 'view.empty')

4.服务的注入

@inject('metrics', 'App\Services\MetricsService')

<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>

5.[扩展 Blade]

下面这个实例将创建一个 @datetime($var)指令,用于格式化 $var参数:

<?php

namespace App\Providers;

use Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        Blade::directive('datetime', function($expression) {
            return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
        });
    }

    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Blade 模板引擎 简介 Blade 是 laravel 提供的一个简单强大的模板引擎。它不像其他流行的 PHP...
    Dearmadman阅读 29,408评论 4 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • 视图view包含应用程序app所要渲染的HTML代码,目的是将应用的显示逻辑和控制逻辑进行分离,即分离控制器con...
    JunChow520阅读 7,110评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,268评论 25 709
  • 这几天感觉进去了倦怠期,总是在反复思索,这样每天读书的意义是什么,改变人生?真的能改变么?我也不知道,有些迷茫了。...
    念希爱读书阅读 1,495评论 0 0

友情链接更多精彩内容