我使用的是Laravel 5.3.28版本。我创建了主视图(main.blade.php)并试图从不同的子视图(navbar.blade.php)中提取细节,这些视图位于view / pages目录中,但它不起作用。
项目/ routes / web.php中的路由文件
Route::get('/', function () {
return view('main');
});
resources / views / main.blade.php中的主视图(此文件将从navbar.blade.php接收数据)
<div id="column">Test1</div>
<div id="container">
@yield('content')<!--This will get the content from navbar.blade.php-->
</div>
资源中的子视图/ views / pages / navbar.blade.php
@extends('main')
@section('content')
<div id="row">
Test2
</div>
@endsection
我能够看到输出为Test1而不是Test2。为什么会发生这种情况?
答案 0 :(得分:1)
要查看导航栏内容,您应该返回navbar
视图:
Route::get('navbar', function () {
return view('navbar');
});
但是,如果您计划在许多视图中添加导航栏,则应使用@include()
而不是section()
,extends()
和yield()
:
@include(`navbar`)
答案 1 :(得分:1)
要查看输出Test2,您必须返回navbar
视图
Route::get('/', function () {
return view('navbar');
});
@yield
是您扩展main view
的地方,然后您可以在此内容中添加内容。
我在下面通过使用您的视图文件的示例进行解释
你可以简单地把它放在navbar.blade.php中。它不需要扩展。
<div id="row">
Test2
</div>
在你的main.blade.php中你可以把这个
<div id="column">Test1</div>
<div id="container">
@include('navbar')
@yield('content')
</div>
假设您已决定创建第三个视图,该视图将使用导航栏视图扩展主视图。假设您创建了一个名为home.blade.php的视图并将其添加到home.blade.php视图中
@extends('main')
@section('content')
Welcome Home !!!
@endsection
然后,如果您致电创建您的路线,如下所示
Route::get('/home', function () {
return view('home');
});
它将呈现如下
<div id="column">Test1</div>
<div id="container">
<div id="row">
Test2
</div>
Welcome Home !!!
</div>
希望这将清除您关于视图渲染的概念
答案 2 :(得分:1)
你应该调用view('navbar')而不是view('main')因为navbar是主视图的子项
如果您呼叫父母,则不会在那里看到呼叫视图('navbar')