【问题标题】:I can't use @yield correctly我无法正确使用@yield
【发布时间】:2020-03-22 04:26:26
【问题描述】:

我在一个页面上使用两个@yield 作为主要内容,第二个用于导航栏,但导航栏根本没有显示,我是 laravel 的新手,一定是以错误的方式学习了一些概念。 该项目遵循以下文件夹结构

views /
      component / navbar.blade.php
      layouts / main.blade.php
      reviewer / reviewer.blade.php

web.php

Route::resource('reviewer', 'ReviewerController');

ReviewerController.php

public function index(){
        $title = "All Project";
        $projects = session('projects');
        return view('reviewer.index', compact(['projects','title']));
    }

main.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace(' _', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        @yield('navbar')
        @yield('conteudo')        
    </body>
</html>


reviewer.blade.php


@extends('layouts.main')

@section('conteudo')

<h3> {{$title}} <h3>

<ul>
    @foreach( $projects as $p )
        <li> {{ $p['id'] }} | {{ $p['name'] }} | {{ $p['appraiser']}} | {{ $p['student'] }} </li>
    @endforeach
</ul>

@endsection

navbar.blade.php

@extends('layouts.main')

@section('navbar')
    <div id='menu'>
        <ul>
            <li><a href="#">Início</a></li>
            <li><a href="#">Edital</a></li>
            <li><a href="#">Resultados</a></li>
            <li><a href="#">Bem vindo user</a></li>
        </ul>
    </div>
@endsection 

【问题讨论】:

  • @yield() 不是这样工作的。在扩展layouts.main.blade 中,您需要一个@section('sidebar')。你也可以在layouts.main 中做一个@include('sidebar'),只用HTML。
  • 那么据我了解,我应该将yield(导航栏)的名称更改为yield(侧边栏)吗?
  • 抱歉,不,这不是重点;我误读了变量名。我的意思是,如果你使用@yield(),你需要一个@section() 来匹配,而reviewer.blade.php 中没有。你可以直接在main.blade.php中使用@include('navbar'),在navbar.blade.php中去掉@extends()@section
  • 与 include 完美配合,仍然有点弱,或者因为它不使用“两个”产量,但您可以查看应用程序。
  • 是的,你可以使用两个@yield(),这很好,但在这种情况下它没有多大意义,除非每个视图都有不同的导航栏。这里更大的问题是有两个带有@extends() 的文件;您只能返回 1 个视图,并且应该是扩展另一个视图的视图,因此除非您执行 view("navbar"),否则这是行不通的。

标签: php laravel


【解决方案1】:

试试这个你的 main.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace(' _', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        @include(' component.navbar')
        @yield('conteudo')        
    </body>
</html>

reviewer.blade.php

@extends('layouts.main')

@section('conteudo')

<h3> {{$title}} <h3>

<ul>
    @foreach( $projects as $p )
        <li> {{ $p['id'] }} | {{ $p['name'] }} | {{ $p['appraiser']}} | {{ $p['student'] }} </li>
    @endforeach
</ul>

@endsection

navbar.blade.php

<div id='menu'>
        <ul>
            <li><a href="#">Início</a></li>
            <li><a href="#">Edital</a></li>
            <li><a href="#">Resultados</a></li>
            <li><a href="#">Bem vindo user</a></li>
        </ul>
 </div>

ReviewController.php

public function index(){
        $title = "All Project";
        $projects = session('projects');
        return view('reviewer.reviewer', compact(['projects','title']));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多