2014-10-29 32 views
1

反正是有從過濾器到控制器傳遞的變量值,Laravel 4:從濾波器通值至控制器

我試圖返回該值,但它破壞控制器執行:

Route::filter('is_admin', function() 
{ 
    $data = DB::select(
     'select level from users where user_id = ? limit 1', 
     array(Auth::user()->id) 
    ); 

    if($data[0]->level > 5) 
    { 
      return 'not authorized'; 
    } 

    //return level here 
}); 
+0

您是否收到任何錯誤訊息? – Jerodev 2014-10-29 12:28:08

+0

@Jerodev不,但從laravel過濾器返回數據,阻止控制器執行 – mwafi 2014-10-29 12:29:56

+1

過濾器應該返回'true' /'false'。將過濾器的變量傳遞給控制器​​不是個好主意。解釋你想要做什麼,我們將嘗試找到另一個孤獨。 – Kasyx 2014-10-29 12:30:00

回答

0

你應該改變你的過濾器分爲:

Route::filter('admin', function() 
{ 
    if (Auth::guest() || Auth::user()->level > 5) 
    { 
     return 'not authorized'; 
    } 
}); 

,並在所有通過此過濾器保護的路徑,您只需使用:

echo Auth::user()->name; 

$user = Auth::user(); 
echo $user->name; 
echo $user->level; 

,這樣你就不需要從過濾器傳遞任何數據到控制器或意見。您可以在控制器中使用它,您可以在其他模型中使用它,甚至可以在視圖中使用它。

0

沒有必要將變量從過濾器傳遞到控制器。它也不好主意。 我看到你想從當前用戶獲得等級。繼控制器內部的代碼應該是足夠多:

$level = Auth::user()->level; 

你也可以讓你的過濾器多simplier:

Route::filter('is_admin', function() 
{ 
    $level = Auth::user()->level; 

    if($level > 5) 
    { 
      return 'not authorized'; 
    } 
}); 
0

有沒有需要傳遞的價值超過。我看到您使用的是Auth::user(),因此您可能有User型號與表users相關聯。

你應該能夠這樣寫:

Auth::user()->level 

(在你的過濾器,以及在你的控制器)