Laravel Blade @yield没有显示@section

时间:2017-01-02 20:15:41

标签: php laravel blade laravel-blade

我的文字显示在两个位置(一个用于桌面,一个用于移动)。因此,我不必每次都将文本放在两个位置,而是认为我可以使用@yield创建一个部分并在每个位置显示文本。我没有收到任何错误,但内容并没有像我期待的那样被写入dom。

以下是刀片模板:

<nav class="blue">
    <div class="nav-wrapper">
        <div class="container">
            <ul class="side-nav" id="mobile-side-nav">
                @yield('navbar-dropdown')
            </ul>
        </div>
    </div>
</nav>
<ul id="nav-dropdown" class="dropdown-content">
    @yield('navbar-dropdown')
</ul>

{{-- List of items to place in the ul's --}}
@section('navbar-dropdown')
    <li><a class="blue-text waves-effect" href="#!">Create Project</a></li>
    <li><a class="blue-text waves-effect" href="#!">Manage Projects</a></li>
    <li class="divider"></li>
    <li><a class="blue-text waves-effect" href="#!">Settings</a></li>
    <li><a class="blue-text waves-effect" href="{{ url('auth/logout') }}">Logout</a></li>
    <li class="divider"></li>
    <li><a class="blue-text waves-effect" href="#!">Help</a></li>
    <li><a class="blue-text waves-effect" href="#!">Report a Problem</a></li>
@endsection

我误解了它是如何工作的,还是我只是做错了?

2 个答案:

答案 0 :(得分:1)

@yield仅在扩展布局时有效。

narbar-dropdown部分的内容放在另一个文件中,然后使用include,会好得多。

E.g。在resources/views/partials/navbar-dropdown.blade.php创建一个文件并添加:

<li><a class="blue-text waves-effect" href="#!">Create Project</a></li>
<li><a class="blue-text waves-effect" href="#!">Manage Projects</a></li>
<li class="divider"></li>
<li><a class="blue-text waves-effect" href="#!">Settings</a></li>
<li><a class="blue-text waves-effect" href="{{ url('auth/logout') }}">Logout</a></li>
<li class="divider"></li>
<li><a class="blue-text waves-effect" href="#!">Help</a></li>
<li><a class="blue-text waves-effect" href="#!">Report a Problem</a></li>

然后在你的布局文件中你会改变:

@yield('navbar-dropdown')

@include('partials/navbar-dropdown')

希望这有帮助!

答案 1 :(得分:0)

我认为你没有扩展布局。当您使用git mv@yield时,您需要在布局中定义要扩展的@section

这是您的模板文件(名为@yield):

Laravel/resources/views/layouts/app.blade.php

这是扩展模板的文件:

<html>
<nav class="blue">
    <div class="nav-wrapper">
        <div class="container">
            <ul class="side-nav" id="mobile-side-nav">
                @yield('navbar-dropdown')
            </ul>
        </div>
    </div>
</nav>
<ul id="nav-dropdown" class="dropdown-content">
    @yield('navbar-dropdown')
</ul>
</html>

希望这有效!