TL;博士 布局:
views
-login.blade.php
-layouts
-a.blade.php
-b.blade.php
登录.blade.php
@extends('layouts.a')
@section('content')
login blade
@endsection
a.blade.php
@extends('layouts.b')
@section('content')
a blade
@yield('content')
@endsection
b.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
b blade
@yield('content')
</body>
</html>
如果您打开相应的 URL,您将看到以下内容:
b blade login blade
因此
a blade
˛ 被 login blade
取代。
TS;博士 我有这样的布局:
views
- login.blade.php
-layouts>
-base_layout.blade.php
-fullscreen_page.blade.php
-no_nav.blade.php
看起来像这样:
登录
@extends('layouts.fullscreen_page')
@section('content')
<div class="shadow rounded-2 p-4 m-4 bg-white" style="min-width: 20vw; max-width: 90vw;">
<div class="text-center">
<h2>Login</h2>
<p class="text-muted">Welcome to the website.</p>
</div>
<div class="form-floating mb-3">
<input type="email" name="email" id="email" class="form-control is-invalid" autocomplete="off"
placeholder="E-mail">
<label for="email">E-mail</label>
</div>
<div class="form-floating mb-3">
<input type="password" name="password" id="password" class="form-control is-invalid" placeholder="Password">
<label for="password">Password</label>
</div>
<input type="submit" value="Login" class="btn btn-primary col-sm col-12">
</div>
<p class="text-muted">Copyright © 2023</p>
@endsection
全屏
@extends('layouts.no_nav_layout')
@section('content')
<div class="d-flex flex-column justify-content-center align-items-center"
style="min-height: 100vh; background-color: #F6F9FF;">
@yield('content')
</div>
@endsection
无导航
@extends('layouts.base_layout')
@section('content')
@yield('content')
@endsection
基本布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>@yield('title')</title>
@vite(['resources\css\app.css', 'resources\js\app.js'])
</head>
<body>
@yield('content')
</body>
</html>
但是,如果我按照粘贴代码的方式进行操作,
fullscreen_page
的内容将被登录内容替换。
我查看了
@parent
指令,但该指令将登录内容放置在全屏内容的下方,我想将其放在里面,而不是在其下方。
我有什么遗漏的吗?
问题的原因是您在嵌套布局中使用
@yield
指令。为了实现您想要的效果(登录内容位于 fullscreen_page 内容内),您应该将 @parent
指令与 @section
指令结合使用。在您的代码中进行以下更改:
fullscreen_page.blade.php:
@extends('layouts.no_nav_layout')
@section('content')
<div class="d-flex flex-column justify-content-center align-items-center"
style="min-height: 100vh; background-color: #F6F9FF;">
@parent
</div>
@endsection
no_nav.blade.php:
@extends('layouts.base_layout')
@section('content')
@parent
@endsection