Laravel 6 @yield() не работает в методе include()

#jquery #laravel #layout #laravel-blade

#jquery — запрос #laravel #макет #laravel-blade #jquery

Вопрос:

Почему @yield('script') не работает?

Я создаю макет в PHP laravel Blade master.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')
  

Я добавляю @yield('script') in layouts.footer для написания кода скрипта, используя @section (‘скрипт’)

макеты.файл нижнего колонтитула

 ....
<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 scripts и links .

Вы можете использовать @stack для этого. подробнее о стеке

макеты.файл нижнего колонтитула

 <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