【发布时间】: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"),否则这是行不通的。