Laravel blade не показывает контент

Я пытаюсь yield использовать один из своих blade файлов, но он не работает.

Это мой index.blade.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="token" content="{{ csrf_token() }}">
    <title>Forum</title>
    <link href="https://fonts.googleapis.com/css?family=Lato:100,200,300,400" rel="stylesheet" type="text/css">
    <link href='https://fonts.googleapis.com/css?family=Roboto:400,500,700' rel='stylesheet' type='text/css'>
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

    <link href="/css/bulma.css" rel='stylesheet' type='text/css'>
    <link href="/css/all.css" rel='stylesheet' type='text/css'>
</head>
<body>
<div id="app">
    @include('shared.menu.menu')
    @yield('content')
</div>
<script src="/js/app.js"></script>
</body>
</html>

Это мой login.blade.php:

@extends('index')
    @section('content')
        @yield('shared.bar.bar')
    @stop

Итак, в этот момент отображается панель навигации. Но в баре нет! Когда я заменяю: @yield('shared.bar.bar') на test, появляется test. Это shared/bar/bar.blade.php:

@section('bar')
<section class="hero is-primary">
    <div class="hero-body">
        <div class="container">
            <h1 class="title">
                test
            </h1>
            <h2 class="subtitle">
                test
            </h2>
        </div>
    </div>
</section>
@stop

Что я делаю неправильно? Можно ли также передавать переменные в бар? Значит, я могу показывать еще title и subtitle на каждой странице?

--РЕДАКТИРОВАТЬ--

@section('bar')
<section class="hero is-primary">
    <div class="hero-body">
        <div class="container">
            <h1 class="title">
                {{ $title }}
            </h1>
            <h2 class="subtitle">
                {{ $subtitle }}
            </h2>
        </div>
    </div>
</section>
@stop

person Jamie    schedule 03.12.2016    source источник


Ответы (1)


Если вы показываете весь свой код, похоже, ваша доходность

@yield('shared.bar.bar')

И ты раздел

@section('bar')

Когда это должно быть

@section('shared.bar.bar')

Или вам следует изменить доходность на

@yield('bar')

Поскольку @yield и @section - это только строки, они не связаны с такими файлами, как @include.

И похоже, что этот файл тоже неверный:

@extends('index')

@section('content')
    @yield('shared.bar.bar')
@stop

@yield - это то, что вы должны начать использовать только в своем основном файле макета, потому что это может стать беспорядочным и трудным, и труднее понять, что происходит. Итак, если у вас нет раздела shared.bar.bar для заполнения этого @yield, вам, вероятно, следует сделать что-то вроде

@extends('index')

@section('content')
    <form>
        .... your login form
    </form>
@stop

or

@extends('index')

@section('content')
    @include('shared.bar.bar')
@stop

or

@extends('index')

@section('content')
    @include('shared.bar.bar')

    <form>
        .... your login form
    </form>
@stop

Чтобы изменить заголовок через раздел, вы также можете:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en">
<head>
    <title>@yield('title')</title>
</head>

or

<h1 class="title">
    @yield('title')
</h1>

И ваш логин-блейд-файл, вы можете сделать

@extends('index')

// This will tell the Blade Compiler to replace every 
// occurence of @yield('title')
@section('title')
    User Login
@stop

@section('content')
    @include('shared.bar.bar')

    <form>
        .... your login form
    </form>
@stop
person Antonio Carlos Ribeiro    schedule 03.12.2016
comment
Привет, когда я оба звоню им bar, это все еще не работает. Также, когда я называю их обоих shared.bar.bar. - person Jamie; 03.12.2016
comment
Похоже, вы их неправильно спроектировали, взгляните на мою правку. - person Antonio Carlos Ribeiro; 03.12.2016
comment
Спасибо за помощь. Я также хотел бы передать 2 параметра (см. Мою правку выше). Но это невозможно с include. Вот почему я использую yield. - person Jamie; 03.12.2016
comment
Урожай если по разделам, а не по переменным. Вам просто нужно использовать view('viewname', ['title' => 'your title']); - person Antonio Carlos Ribeiro; 03.12.2016
comment
Сделал вот так: @include('shared.bar.bar', array('title'=>'test', 'subtitle' => 'test')) спасибо за помощь! - person Jamie; 03.12.2016
comment
Отлично! Это тоже работает, но в этом случае yield и section также могут помочь, показывая, как в новом редактировании. - person Antonio Carlos Ribeiro; 03.12.2016
comment
Тоже отличное решение :) - person Jamie; 03.12.2016