Шаблон лезвия - @extends & @section не работает - PullRequest
0 голосов
/ 20 июня 2019

Я изучаю фреймворк Laravel и пытаюсь разобраться с использованием шаблона лезвия.Однако я не могу на всю жизнь заставить работать функции @extends и @section в моем проекте.

Я уже пытался переустановить весь проект несколько раз, используя разные браузеры и перезагружая мой компьютер, но я не могу понять,почему не отображается содержимое @section

Laravel Версия: 5.7.28 |IDE: PhpStorm

routs / web.php

Route::get('/', function () {
    return view('layouts/index');
});

views / layouts / index.blade.php

<body>
<div class="container-fluid">
    <h1>Site Index</h1>
    @yield('header')
</div>
</body>

views / header.blade.php

@extends('layouts.index')

@section('header')
    <p>Header</p>
@endsection

В настоящий момент отображается только тег в файле views / layouts / index.blade.php.

Большое спасибо за любые комментарии по этому вопросу.

Ответы [ 4 ]

3 голосов
/ 20 июня 2019

Это не так, как работает шаблонирование.Вы должны ссылаться на дочерний шаблон в вашем заявлении на возврат.Поскольку @extends находится в этом дочернем шаблоне, Laravel знает, как использовать упомянутый основной макет.Таким образом, ваш оператор возврата будет выглядеть так:

return view('header');

Если вы просто хотите, чтобы заголовок отображался на каждой странице, вам не нужно расширять основной макет в своем заголовке, вам просто нужно включитьЧасть заголовка в вашем основном макете.

<body>
<div class="container-fluid">
    <h1>Site Index</h1>
    @include('header')
</div>
</body>
0 голосов
/ 20 июня 2019
If you want to show content of section('header') then you must return header view like

Route::get('/', function () {
    return view('header');
});

this is because contents are in header view and you have been extending layout.index

so if you return layout.index view you will not see content of section('header')  
0 голосов
/ 20 июня 2019

спасибо всем за ваши ответы, теперь я понимаю, как двигатель шаблона лезвия работает немного лучше и как я делал это неправильно. Просто для разъяснения другим, которые запутались как я и наткнулись на эту ветку:

Когда вы перенаправляете на представление через веб-маршруты, это должен быть дочерний элемент, который выходит из мастера макетов.

маршруты / web.php

Route::get('/', function () {
    return view('index');
});

HTML-код из мастер-файла будет отображаться по умолчанию, и его содержимое, которое мы «просматриваем»

просмотров / макеты / master.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>@yield('title', 'default title if unspecified')</title>
</head>
<body>
    <h1>Master Header</h1>
    @yield('content')
</body>
</html>

Для работы с содержимым страницы используется индексное представление, с которым работает метод @section ('content').

вид / index.blade.php

@extends('layouts.master')

@section('title', 'Changing the default title')

@section('content')
    <p>content displayed</p>
@endsection

Надеюсь, это поможет кому-то еще.

0 голосов
/ 20 июня 2019

Я проверил вид и макет, они, кажется, работают.проверьте ваш оператор возврата заявления.попробуйте return view('header');

Route::get('/', function () {
    return view('header');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...