Laravel 6 @yield() 在 include() 方法中不起作用

Posted

技术标签:

【中文标题】Laravel 6 @yield() 在 include() 方法中不起作用【英文标题】:Laravel 6 the @yield() not working in include() method 【发布时间】:2020-12-06 07:40:10 【问题描述】:

为什么@yield('script') 不起作用? 我在 php laravel Blade ma​​ster.blade.php 文件中创建一个布局,像这样

@include('layouts.header')
@include('layouts.sidebar')
<div class="main-panel">
    <!-- Navbar -->
@include('layouts.navbar')
<!-- End Navbar -->
    <div class="content">
        <div class="container-fluid">
            @yield('content')
        </div>
    </div>
</div>
</div>
@include('layouts.footer')

我在layouts.footer 中添加@yield('script') 用于使用@section('script')layouts.footer 文件编写脚本代码

....
<script src=" asset('./assets/js/core/jquery.min.js') "></script>
@yield('script')
...
  </body>
</html>

当我在刀片页面中使用 section('script') 时,它不起作用我像这样使用 @yield('script')

@extends('layouts.master')

@section('content')
   <div>
      <button class="btn btn-sm btn-outline-primary" id="modal">
              Sponsored
      </button>
   </div>
@endsection

// JQuery code 
@section('script')
    <script>
        $(document).on("click", "#modal", function () 
            alert('hello world');
        );
    </script>
    @endsection

【问题讨论】:

【参考方案1】:

Blade 允许您推送到命名堆栈,这些堆栈可以在另一个视图或布局中的其他位置呈现。这对于指定子视图所需的任何 javascript 库特别有用:

这是include scriptslinks 的错误方式。

您可以使用@stack。更多关于stack

layouts.footer 文件

<script src=" asset('./assets/js/core/jquery.min.js') "></script>
@stack('script')

刀片文件

@push('script')
    <script>
        $(document).on("click", "#modal", function () 
            alert('hello world');
        );
    </script>
@endpush

【讨论】:

以上是关于Laravel 6 @yield() 在 include() 方法中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 检查@yield 是不是为空

为啥我的@yield() 没有显示内容?在 Laravel PHP 模板中

Laravel Blade 限制 @yield 结果的字符

Laravel - @yield 和 @section 之间的区别?

为啥我的 laravel 项目将@extends、@yield 和@section 显示为纯文本?

Laravel - Blade @yield 在向用户提供 html 时忽略标签