Шаблон лезвия Laravel @yield и @section как это работает? - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в 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 голосов
/ 15 ноября 2018

При условии, что у вас 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');
    }
}

По сути, я не сказал вам ничего, чего еще нет в документации.

...