Laravel Blade @yield variable scope

2019-06-18 15:52发布

I have two pages that are almost identical. One shows a list of users, the other shows the same list, but with more verbose information. So I am calling two views that extend the same wrapper. However, Laravel complains that $user is not defined in verbose.blade.php. I am passing $users to the view which seems to be available to content.blade.php but the $user that is created within the foreach loop doesn't seem to be accessible in verbose.blade.php.

verbose.blade.php

@extends('layout.content')

@section('user')
    {{ dd($user) }}
@endsection

nonverbose.blade.php

@extends('layout.content')

@section('user')
    {{ dd($user) }}
@endsection

content.blade.php

@extends('layout.app')

@section('content')
    @foreach($users as $user)
        @yield('user')
    @endforeach
@endsection

I have also tried @yield('user', ['user' => $user])

How would I go about making $user available in verbose.blade.php?

2条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-06-18 16:20

Did you have tried to use @include?

@include('user', ['user' => $user])
查看更多
聊天终结者
3楼-- · 2019-06-18 16:20

You get that error because of the order that Laravel parses blade templates in.

Sometimes we programmers get so engrained in our "don't repeat yourself (DRY)" principle that we take it too far. This is one of those times -- you should simply put the foreach loop directly into verbose.blade.php:

@extends('layout.app')

@section('content')
    @foreach($users as $user)
        @yield('user')
    @endforeach
@endsection
查看更多
登录 后发表回答