【问题标题】:Laravel's Blade template @yield and @section how does it work?Laravel 的 Blade 模板 @yield 和 @section 它是如何工作的?
【发布时间】:2019-04-18 09:49:10
【问题描述】:

我是 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>

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

【问题讨论】:

  • @yield 在您的“父”模板中,在子模板中使用 @extends@section。更多关于template inheritance。另外,不要将&lt;script&gt; 标签放在&lt;script&gt; 标签中。并且:&lt;!-- --&gt; 用于 HTML cmets

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


【解决方案1】:

假设您有 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');
    }
}

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

【讨论】:

  • 感谢您的回答,但如果帖子有多重继承怎么办?如何在多个模板中使用它们?
  • 我需要一个例子来说明你的想法。
【解决方案2】:

是的,假设你有一个模板,你可以在layouts/app.blade/php 中创建模板的基础,你可以在@yield('anything') 中创建,然后在你的views/main.blade.php 中你必须提供@extends('layouts.app')

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

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 2021-03-29
    • 2015-06-08
    • 2019-01-15
    • 2017-11-18
    • 2016-02-27
    • 1970-01-01
    • 2019-09-26
    • 2015-05-18
    相关资源
    最近更新 更多