【问题标题】:Laravel foreach in blade template overiding variables刀片模板中的 Laravel foreach 覆盖变量
【发布时间】:2016-12-16 18:12:46
【问题描述】:

相当奇怪的错误。

在我的用户页面上,我传递用户数据。

{{ $user->username }}   

这将通过正确的用户名。

但是,如果我这样做:

{{ $user->username }}   

@if ($followers->count())
    <h2>Following</h2>
    @foreach ($followers as $user)
        @include('user/partials/userblock')
    @endforeach
@endif

{{ $user->username }}

第一个 $user->username 会正确输出,但最后一个实际上会返回在 foreach 中循环的最后一个用户!

为什么会这样?

这是用户控制器,对于那些想知道的人:

public function getUser($username) {
    $user = User::where('username', $username)->first();        

    if (!$user) {
        return redirect()->route('home')->with('info', 'User not found.' );
    }       

    $followers = $user->followers();

    return view('user.index')
        ->with('user', $user)
        ->with('followers', $followers);    
}       

【问题讨论】:

    标签: php laravel blade


    【解决方案1】:

    只需使用另一个变量:

    @foreach ($followers as $follower)
        @include('user/partials/userblock', ['user' => $follower])
    

    【讨论】:

    • 它有效。但是,为了将来参考,为什么会发生这种情况?
    • 发生这种情况是因为 foreach 在每次迭代中都用其他值覆盖了 $user 变量。 foreach 没有自己的作用域。
    【解决方案2】:

    你可以使用另一个变量,像这样:

    public function getUser($username) {
    $cuser = User::where('username', $username)->first();        
    
    if (!$cuser) {
        return redirect()->route('home')->with('info', 'User not found.' );
    }       
    
    $followers = $cuser->followers();
    
    return view('user.index')
        ->with('cuser', $cuser)
        ->with('followers', $followers);    
    } 
    

    你的刀片:

    {{ $cuser->username }}   
    
    @if ($followers->count())
        <h2>Following</h2>
        @foreach ($followers as $user)
            @include('user/partials/userblock')
        @endforeach
    @endif
    
    {{ $cuser->username }}
    

    希望这行得通!

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2017-02-08
      • 2014-10-13
      • 2014-12-08
      • 2023-04-05
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多