Как получить переменную в Laravel blade @foreach loop из внешнего вида - PullRequest
2 голосов
/ 03 апреля 2019

У меня blade вид с @foreach петлей.В этом представлении blade я также передаю переменную $user в UserController.Внутри @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)

Ответы [ 5 ]

1 голос
/ 03 апреля 2019

В вашем случае, пожалуйста, используйте этот код на return

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

->with(compact('threads'))

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

Вы можете использовать с столько раз, сколько захотите .Надеюсь, это решит вашу проблему.

0 голосов
/ 03 апреля 2019

Почему вы не используете auth() вспомогательную функцию вместо

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

Таким образом, вам не нужно передавать ее через контроллер.

0 голосов
/ 03 апреля 2019

Попробуйте с этим:

@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
0 голосов
/ 03 апреля 2019

Попробуйте определить его выше цикла 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

Надеюсь, это поможет!

0 голосов
/ 03 апреля 2019

Вам нужно проверить, имеет ли переменная значение или нет, если laravel не удалось получить значение $user->getAvatar(), оно обязательно вернет ошибку так что просто попробуйте следовать

@isset($user->getAvatar())

@endisset
...