Laravel的Blade模板@yield和@section如何工作?

时间:2018-11-15 10:08:45

标签: php laravel laravel-5 view laravel-blade

我是Laravel的新手,想学习如何正确使用Blade模板系统,但是我无法绕过@section和@yield之间的区别。 我一直在阅读文档:https://laravel.com/docs/5.7/blade

但是它没有解释差异以及如何正确使用它们。 我也一直在其他论坛上阅读帖子:

https://laravel.io/forum/09-02-2014-using-section-and-yield

但是我还是有些困惑。

例如,现在我正在创建一个应用程序,其中有多个页面,并且它们之间有共同的部分,所以现在我知道我必须为此页面创建一个通用布局,但是何时使用@section和何时使用必须使用@yield吗?

例如,如果我有这样的页面:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <title>{{ config('app.name', 'Name') }}</title>
    //Common CSS between pages
    <link href="{{ asset('css/style1.css') }}" rel="stylesheet">
    //Changing CSS between pages
    <link href="{{ asset('css/style2.css') }}" rel="stylesheet">
</head>
<body>
    //the content stay the same !
    <div id="app">
        <span id="some_style">hello world !</span>
    </div>
    <script>
       //common JS
       <script src="{{ asset('script1.js') }}">
       //Changing JS between pages
       <script src="{{ asset('script2.js') }}">
    </script>
</body>
</html>

如何使用刀片模板组织它?

1 个答案:

答案 0 :(得分:0)

假设您有2个模板。让我们叫一个Base.blade.php和另一个Posts.blade.php

我们将在@extends('base')Posts

@section中使用Posts,在@yield中使用Base

类似这样的东西:

Base

@yield('posts') {# the section called "posts" #}


Posts

@extends('base')

@section('posts')
   Here be posts
@endsection

posts中写入的任何内容都将在基础刀片中成为yielded

将其视为继承。

如果可以的话,您可以将其想象为类。子类在基类中调用方法的地方。

class Base {
    protected function printSomething($something) {
        echo $something;
    }
}


class Posts extends Base {
    public function BaseWillPrint() {
        $this->printSomething('POSTS');
    }
}

基本上,我没有告诉您文档中尚不存在的任何内容。