15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelでログイン済みの全てのページに共通のビュー変数を渡す方法

Last updated at Posted at 2014-08-06

(ログイン処理に限らないですが)

ログイン後にページのメニューバーの端にログインしているユーザのユーザ名等を表示させたりすることが多いと思います(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

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?