Laravel 8.0 Blade anidado @extends @sección y @yield no trabajar

Tengo esto template.blade.php con un camino views/templates/template.blade.php con el siguiente código:

// template.blade.php


// some codes here

@include("templates.navigation.navigation")
@yield('header')
@yield('content')
@include('templates.footer.footer')

// some other codes here

Ahora, en mi ruta, la home.blade.php (accesible en views/home/home.blade.php) fue establecido como la página de aterrizaje. La página principal necesita pedir prestado una sección de código (código para los botones flotantes. Cada botón flotante difiere dependiendo de la página actual). Aquí está el código para la página principal:

// home.blade.php


@extends('templates.template')
@section('header')
    // some codes here
@endsection

@section('content')
    // some other codes here
    @yield('float-button-module-menu') // the code that needs to be accessed but doesn't work
@endsection

El @yield('float-button-module-menu') tendría acceso views/templates/float-buttons/float-buttons.blade.php. Aquí está el código de dicha página web:

// float-buttons.blade.php


@extends('home.home') // I suspect that I was wrong at declaring the name for the @extends here
@section('float-button-module-menu')
    // some codes inside the section that needs to be displayed
@endsection

Para simplificar la pregunta, necesito acceder a la @section('float-button-module-menu') desde float-buttons.blade.php dentro home.blade.php. No conozco el problema dentro de la lógica de esto.

EDIT aquí está el código completo para las secciones dentro float-button.blade.php:

// float-button.blade.php


@extends('home.home')
@section('float-button-module-menu')
@endsection @section('float-button-anchor')
@endsection @section('float-button-help')
@endsection // list of buttons would be updated.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por techinnovator


3 Respuestas:

  • Ampliar las vistas es para cuando usted llama / mira un archivo de hoja directamente, por ejemplo a través return view('templates.float-buttons.float-buttons'). Parece que esto no es lo que estás buscando. ¿Quieres? @include el archivo en su home.blade.php. Realizar los siguientes cambios:

    home.blade.php:

    @extends('templates.template')
    @section('header')
        // some codes here
    @endsection
    
    @section('content')
        // some other codes here
        @include('templates.float-buttons.float-buttons')
    @endsection
    

    Botones flotantes.blade.php:

    My Float Buttons Code

    float-buttons.blade.php sólo contiene el código para los botones de flotación


    Segunda parte

    Puede pasar parámetros a @include cuando incluyendo subviews. Vea si estos cambios se ajustan a sus necesidades:

    casa.blade.php

    @extends('templates.template')
    @section('header')
        // some codes here
    @endsection
    
    @section('content')
        // some other codes here
        @include('templates.float-buttons.float-buttons', ['type' => 'anchor'])
    @endsection
    

    Botones flotantes.blade.php:

    @if ($type == 'anchor')
    
    @elseif ($type == 'help')
    @else {{-- if no type parameter is given --}}

    Parameter 'type' is required

    @endif

    Entonces puedes usar @include('templates.float-buttons.float-buttons', ['type' => 'anchor']) o @include('templates.float-buttons.float-buttons', ['type' => 'help']) donde lo necesites. Y por supuesto no dude en ampliar la lista


    Nota: Una solución más elegante sería crear archivos de hoja individuales para cada uno de sus casos ('float-buttons-anchor.blade.php, los botones flotantes-ayuda.blade.php...) and then include the file you need:@include('templates.float-buttons.float-buttons-help')

    Respondida el Dec 18, 2020 a las 13:22 - por bugbusterx

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando es que estás extendiendo la plantilla incorrecta en tu archivo float-buttons.blade.php. En lugar de extender home.home, debes extender templates.template, que es la plantilla principal donde has definido las secciones header y content.

    Aquí está el cambio que debes hacer en tu archivo float-buttons.blade.php:

    php
    @extends('templates.template')
    @section('float-button-module-menu')
        // some codes inside the section that needs to be displayed
    @endsection
    

    Al extender templates.template, podrás acceder a las secciones definidas en esa plantilla dentro de home.blade.php. Con este ajuste, el @yield('float-button-module-menu') en home.blade.php podrá acceder y mostrar el contenido de float-buttons.blade.php.

    Una vez que hagas este cambio, el código debería funcionar correctamente y podrás acceder a la sección float-button-module-menu dentro de home.blade.php desde float-buttons.blade.php. ¡Espero que esto solucione tu problema!

    Respondida el Dec 19, 2020 a las 13:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Tienes un error en la forma en que extiendes la plantilla en float-buttons.blade.php. Deberías extender la plantilla template, no home.

    Aquí está el código corregido para float-buttons.blade.php:

    
    @extends('templates.template')
    
    @section('float-button-module-menu')
        
    @endsection @section('float-button-anchor')
    @endsection @section('float-button-help')
    @endsection

    Además, asegúrate de que float-buttons.blade.php esté en el directorio correcto, que es resources/views/templates/float-buttons/float-buttons.blade.php, basado en la ruta que proporcionaste en tu publicación.

    Respondida el Dec 19, 2020 a las 13:29 - por Gemini

    Votos positivos: 0 | Votos negativos: 0