(ログイン処理に限らないですが)
ログイン後にページのメニューバーの端にログインしているユーザのユーザ名等を表示させたりすることが多いと思います(Qiitaしかり)。
そのように、ある条件をもとに共通のビュー変数を複数のページに渡す方法のメモです(もっとスマートなやり方があったら教えて下さい)。
前提条件
- ログイン後はユーザのIDをセッションに保存している
- DBのuserテーブルにidフィールドがある。
実装方法
どのビューであっても、同様のビュー変数を渡す方法としてView::share()
を使います。これをログイン判定のルートフィルタ内に、ログイン後に呼び出されるように記述します。
filters .php
Route::filter('auth', function()
{
if(!Session::has('id')){
return Redirect::to('/');
}
$user = User::where('id','=', Session::get('id')) -> first();
View::share("user", $user);
});
あとは、ログイン判定を求めるページをルートグループでまとめれば、ログインユーザの情報を表示したい複数のページにまとめて変数を渡すことが出来ます。このフィルタを通った(ログイン出来た)場合のみ、ユーザ情報をDBから取得し、ページにログインユーザの情報を表示出来ます。
routes.php
Route::group(array('before' => 'auth'), function(){
Route::get('user/', 'IndexController@user');
Route::get('my/', 'IndexController@my');
});
参考:
PHP - Laravelで共通のビュー変数を複数のルートで共有する - Qiita http://qiita.com/takaaki-mizuno/items/f937ceae33b288b77316