5

私は最近 Laravel 4 で開発を始めましたが、ルートについて質問がありました。

「/」については、ユーザーの認証ステータスに基づいて 2 つの異なるビュー ページが必要です。

ユーザーがログインして「/」を表示している場合は、管理者コントロールを含むビューを表示したいと思います。ユーザーがログインせずに通常のユーザーとして「/」を表示している場合は、一般的な情報ビューを提供したいと思います.

これを達成するために、フィルター「auth」と「guest」で遊んでいますが、うまくいきません。// app/routes.php

// route for logged in users
Route::get('/', array('before' => 'auth', function()
{
   return 'logged in!';
}));

// for normal users without auth
Route::get('/', function() 
{ 
    return 'not logged in!'; 
}));

上記のコードは、ログインしたユーザーとして適切な応答を表示できるところまで機能しますが、ログアウトした後、通常のユーザーとして適切な応答を表示できません。

おそらく、これはコントローラーで処理する必要があるものですか?誰かが私を正しい方向に向けることができれば、それは本当に役に立ちます.

4

1 に答える 1

16

1 つの (単純な) オプションは、Auth::check()関数を使用して、ログインしているかどうかを確認することです。

Route::get('/', function() 
{
    if (Auth::check())
    {
        return 'logged in!';
    }
    else
    {
        return 'not logged in!'; 
    }  
});

必要に応じて、コントローラーで同じロジックを使用できます。

編集 - フィルターの使用

フィルターでこれを行いたい場合は、次のようなものを使用できます。

Route::filter('auth', function()
{
    if (Auth::guest()) 
    {
        return Redirect::to('non-admin-home');
    }
});

次に、通常のユーザーを処理するための 2 番目のルート (またはコントローラーでのアクション) を定義します。これはページの別のURLを意味しますが、それはあなたが望むものではないと思います..

完全なコントローラーベースのルーティング フロー: (routes.phpクリーンな状態を保つ)

ルート.php

Route::controller('/', 'IndexController');

IndexController.php

class IndexController extends BaseController
{
    // HOME PAGE
    public function getIndex()
    {
        if (Auth::check())
        {
            return View::make('admin.home');
        }
        else
        {
            return View::make('user.home');
        }
    }
}
于 2013-08-05T03:26:57.020 に答える