【问题标题】:Laravel Blade @extends and @yield not workingLaravel Blade @extends 和 @yield 不起作用
【发布时间】:2019-05-20 05:59:43
【问题描述】:

所以我有 input.blade.php,它扩展了 register.blade.php(它扩展了 app.blade.php),但我的 input.blade.php 的 @section('input.agent') 中的内容不是在我的 register.blade.php 中可见,带有 @yield('input.agent') ,它位于卡体选项卡窗格下(有点难找,但它就在那里)。

这是我的 register.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="card">
        <div class="card-header">
            <nav>
                <div class="nav nav-tabs card-header-tabs" id="nav-tab" role="tablist">
                    <a class="nav-item nav-link active" id="nav-agent-tab" data-toggle="tab" href="#nav-agent" role="tab" aria-controls="nav-agent" aria-selected="true">Agent</a>
                    <a class="nav-item nav-link" id="nav-development_officer-tab" data-toggle="tab" href="#nav-development_officer" role="tab" aria-controls="nav-development_officer" aria-selected="false">Development Officer</a>
                </div>
            </nav>
        </div>
        <div class="card-body">
            <div class="tab-content" id="nav-tabContent">
                <div class="tab-pane fade show active" id="nav-agent" role="tabpanel" aria-labelledby="nav-agent-tab">@yield('input.agent')</div>
                <div class="tab-pane fade" id="nav-development_officer" role="tabpanel" aria-labelledby="nav-development_officer-tab">Hello</div>
            </div>
        </div>
    </div>
</div>
@endsection

这是我的 input.blade.php

@extends('auth.register')

@section('input.agent')
    <h1>Hello</h1>
@endsection

这是路由下的web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

我的目录:

view=>auth=>register.blade.php

view=>input=>input.blade.php

view=>layouts=>app.blade.php

请帮助我 我在这里做错了什么?

【问题讨论】:

  • @yield('input.agent')在哪里?
  • 是的,但是你把那个“产量”放在哪里了?
  • 对不起。现在我可以看到它。一切看起来都很好。你能在浏览器中看到卡体吗?如果你在@yield 旁边写一些文字,你能看到吗?
  • 是的,我可以看到是否说我输入了 Hello world

标签: laravel


【解决方案1】:

尝试使用@include 而不是@yield

<div class="tab-pane fade show active" id="nav-agent" role="tabpanel" aria-labelledby="nav-agent-tab">@include('input.input')</div>

在您的 register 视图中。

并删除:

@extends('auth.register')

@section('input.agent')
@endsection

在您的 input 视图中(仅保留 html)。

否则您将不得不返回 input 视图而不是 register

【讨论】:

  • 它成功了,谢谢,但是如果我有两种类型的用户的两个输入部分并希望它们在一个 input.blade.php 中呢?
  • 然后保持原样并创建一条新路线,例如Route::get('/input-register', function () { return view('input.input'); });
  • 对不起,我没看懂,能否详细解释一下Route:方法
  • 是的,我会试试的。注册路由在Auth::routes(); 内。它们是由 Laravel 创建的。因此,当您在浏览器中转到your-domain/register 时,返回的视图将是register.blade.php,它从layouts.app 扩展而来,这就是您可以像您一样使用layouts.app @yield('content') 的原因。要对@yield('input.input') 执行相同操作,您必须返回从register 视图扩展的其他视图。然后您可以使用@section 在父视图中填充@yield。对不起,如果我不能很好地解释自己,英语不是我的母语。
  • 对不起,是'input.agent' 不是'input.input'
猜你喜欢
  • 2021-03-29
  • 2021-07-06
  • 2017-12-12
  • 2016-02-27
  • 2018-06-08
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多