Laravel @include и @yield blade

В настоящее время я использую шаблонизатор Laravel Blade для создания страниц. Я использую страницу по умолчанию для рендеринга всего. Проблема в том, что я не могу получить все css в головной части. В меню есть настраиваемый CSS, который я в конечном итоге хочу включить в голову. Таким образом, я могу использовать каждую деталь индивидуально. Почему css не попадает в часть head.blade.php?

Default.blade.php

<!doctype html>
<html>
    <head>
        @include('includes.head')
    </head>
    <body>
        <div class = "container">

                <header class = "row">
                    @include('includes.menu')
                </header>

                <div id = "main" class = "row">
                    @yield('content')
                </div>

            </div>
        </body>
    </html>

head.blade.php

<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
@yield('styles')

menu.blade.php

@section('styles')
    <link href = "{{ asset('/css/menu.css') }}" rel = "stylesheet">
@endsection

login.blade.php

@extends('layouts.default')

@section('styles')
    @parent
    <link href = "{{ asset('/css/login.css') }}" rel = "stylesheet">
@endsection

@section('content')
--content here--
@stop

В конечном итоге я хочу, чтобы каждый отдельный css загружался в файл head на основе включенных представлений.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
4 856
2

Ответы 2

Default.blade.php

<!doctype html>
<html>
    <head>
        @section('head')
            @include('includes.head')
        @show
    </head>
    <body>
    <div class = "container">

            <header class = "row">
                @include('includes.menu')
            </header>

            <div id = "main" class = "row">
                @yield('content')
            </div>

        </div>
    </body>
</html>

@section ... @show такой же, как @yield, но сразу показывает

head.blade.php

<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">

тогда, если вы хотите добавить больше стилей в голову, сделайте это в menu.blade.php

@section('head')
@parent
    <link href = "{{ asset('/css/menu.css') }}" rel = "stylesheet">
@endsection

или если вы хотите заменить все стили, сделайте это без @parent

Хотя при этом загружается CSS для login.blade.php, CSS для меню по-прежнему не отображается.

IceEcold 29.05.2018 13:30

поместите ваш @yield('styles') в Default.blade.php после @include, и он будет работать

Malkhazi Dartsmelidze 29.05.2018 14:18

Это возвращает встроенный CSS. Я предпочитаю, чтобы все мои CSS находились в голове. Полагаю, это невозможно с помощью двигателя с лезвиями.

IceEcold 29.05.2018 14:29

Вот моя песчинка. Вы можете организовать их таким образом, чтобы разделы распознавания лезвия были определены в главном шаблоне (в вашем случае default.blade.php)

default.blade.php

<!doctype html>
<html>
  <head>
    @yield('head')
    @yield('styles')
  </head>
  <body>
    <div class = "container">

      <header class = "row">
        @yield('primarymenu')
      </header>

      <div id = "main" class = "row">
        @yield('content')
      </div>

    </div>
    @yield('scripts')
  </body>
</html>

Обратите внимание, что я добавил раздел скриптов ^^^, который позже также будет заполнен в каждом компоненте (меню, логин)

включает / head.blade.php

@section('head')
  <meta charset = "utf-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1">
@endsection

включает / menu.blade.php

@section('primarymenu')
  <!-- here goes your navitation links -->
@endsection

@section('styles')
  @parent
  <link href = "{{ asset('/css/menu.css') }}" rel = "stylesheet">
@endsection

@section('scripts')
  @parent
  <script type = "text/javascript" src = "{{ asset ('js/menu.js') }}"></script>
@endsection

login.blade.php

@extends('layouts.default')

@section('content')
  @include('includes.head')
  @include('includes.menu')
  <!-- here goes your login contents -->
@endsection

@section('styles')
  @parent
  <link href = "{{ asset('css/login.css') }}" rel = "stylesheet">
@endsection

@section('scripts')
  @parent
  <script type = "text/javascript" src = "{{ asset ('js/login.js') }}"></script>
@endsection

Также обратите внимание на использование @parent, которое также помогает, когда вы хотите добавить больше контента в раздел, где другие компоненты, возможно, уже были заполнены контентом.

Надеюсь, это поможет!

Другие вопросы по теме