2016-12-16 97 views
2

相當奇怪的錯誤。Laravel foreach在刀片模板過分變量

在我的用戶頁面上,我傳遞用戶數據。

{{ $user->username }} 

這將通過正確的用戶名。

但是,如果我做這樣的事情:

{{ $user->username }} 

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

{{ $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);  
}  

回答

2

只需使用另一個變量:

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

它的工作原理。但是,爲了將來的參考,爲什麼會發生這種情況? –

+1

這是因爲foreach在每次迭代中用其他值覆蓋'$ user'變量。 'foreach'沒有它自己的範圍。 –

1

您可以使用另外一個變量,像這樣:

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 }} 

希望這工作!