簡體   English   中英

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

[英]Laravel's Blade template @yield and @section how does it work?

我是 Laravel 的新手,想學習如何正確使用 Blade 模板系統,但我無法理解 @section 和 @yield 之間的區別。 我一直在閱讀文檔: https : //laravel.com/docs/5.7/blade

但這並沒有解釋差異以及如何正確使用它們。 我一直在閱讀其他論壇上的帖子,就像這樣:

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

但我還是有點困惑。

例如,現在我正在創建一個應用程序,它有多個頁面,它們之間有公共部分,所以現在我知道我必須為此頁面創建一個通用布局,但是何時使用 @section 以及何時必須使用@屈服 ?

例如,如果我有一個這樣的頁面:

<!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>

我如何使用刀片模板組織它?

假設您有2個模板。 讓我們調用一個Base.blade.php和另一個Posts.blade.php

我們將在Posts @extends('base')

Posts使用@section和在Base使用@yield

像這樣:

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

基本上,我沒有告訴過您文檔中尚不存在的任何內容。

是的,假設你有一個模板,你可以在layouts/app.blade/php中制作模板的基礎,你可以制作@yield('anything')然后在你的views/main.blade.php你必須給@extends('layouts.app')

@section('anything')
*for dynamic page
@endsection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM