繁体   English   中英

如何从外部视图获取 Laravel Blade @foreach 循环中的变量

[英]How to get variable in Laravel blade @foreach loop from outer view

我有带有@foreach循环的blade视图。 在这个blade视图中,我还在 UserController 中传递了$user变量。 @foreach我有代码{{ $user->getAvatar() }}

@extends('layouts.app')

@section('content')

@foreach($threads as $thread)
    <div class="media alert {{ $class }}">
        <img src="{{ $user->getAvatar() }}">
        <div class="media-body">
            <p>
            {{ $thread->latestMessage->body }}
            </p>
        </div>    
    </div>
@endforeach

@endsection

这是我的控制器中的 index() 函数

public function index()
    {
        $user = Auth::user();
        $threads = Thread::getAllLatest()->get();
        return view('messenger.index', compact('threads', 'user'));
    }

我有错误Undefined variable: user foreach循环从视图的其他部分看不到变量。

ErrorException (E_ERROR)
Undefined variable: user (View:messenger\partials\thread.blade.php) (View: messenger\partials\thread.blade.php)
Previous exceptions
Undefined variable: user (View: messenger\partials\thread.blade.php) (0)
Undefined variable: user (0)

在您的情况下,请在返回时使用此代码

return View::make('messenger.index')

->with(compact('threads'))

->with(compact('user'));

您可以随心所欲地使用 这将有望解决您的问题。

您需要检查变量是否有值,如果 Laravel 无法获取$user->getAvatar()值,它肯定会返回错误,因此请尝试以下操作

@isset($user->getAvatar())

@endisset

试试这个:

@foreach($threads as $thread)
    <div class="media alert {{ $class }}">
        <img src="{{ isset($user) ? $user->getAvatar : '' }}">
        <div class="media-body">
            <p>
            {{ $thread->latestMessage->body }}
            </p>
        </div>    
    </div>
@endforeach

尝试在 foreach 循环上面定义它

@extends('layouts.app')

@section('content')
<?php 
   $user_avatar = $user->getAvatar();
?>
@foreach($threads as $thread)
<div class="media alert {{ $class }}">
    <img src="{{ $user_avatar }}">
    <div class="media-body">
        <p>
        {{ $thread->latestMessage->body }}
        </p>
    </div>    
</div>
@endforeach

@endsection

希望能帮助到你 !

为什么不使用auth()辅助函数

<img src="{{ auth()->user()->getAvatar() }}">

这样你就不需要通过控制器传递它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM