【问题标题】:How to get variable in Laravel blade @foreach loop from outer view如何从外部视图获取 Laravel 刀片 @foreach 循环中的变量
【发布时间】:2019-08-24 22:50:11
【问题描述】:

我有blade 视图和@foreach 循环。在这个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: userforeach 循环从其他部分看不到变量。

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)

【问题讨论】:

  • 请添加完整的错误信息
  • 您正在调用视图messenger.index,但错误来自messenger\partials\thread.blade.php。您是否向我们展示了所有相关的视图代码?你是在某处调用一个局部变量而不是将该变量传递给它吗?
  • 问题很简单。 @foreach 循环看不到外部变量。
  • @SergeyS。分享完整的相关代码,这里肯定缺少一些东西

标签: php laravel foreach laravel-blade


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    在您的情况下,请在 return

    上使用此代码
    return View::make('messenger.index')
    
    ->with(compact('threads'))
    
    ->with(compact('user'));
    

    您可以根据需要多次使用。这有望解决您的问题。

    【讨论】:

      【解决方案3】:

      尝试在 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
      

      希望对你有帮助!

      【讨论】:

      • 未定义变量:user_avatar.
      【解决方案4】:

      试试这个:

      @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
      

      【讨论】:

        【解决方案5】:

        你需要检查变量是否有值,如果 laravel 无法获取 $user-&gt;getAvatar() 的值肯定会返回错误 所以请尝试关注

        @isset($user->getAvatar())
        
        @endisset
        

        【讨论】:

        • 变量有值。如果我在刀片模板中添加{{dd($user)}},我会看到对象。但是在@foreach loop 中,这个变量是undefined
        猜你喜欢
        • 2021-02-11
        • 2017-12-24
        • 2018-04-04
        • 2017-11-13
        • 2019-09-11
        • 2019-05-25
        • 2016-06-29
        • 1970-01-01
        • 2020-03-18
        相关资源
        最近更新 更多