2016-03-31 7 views
1

私のWebページには、ログイン、登録、ログアウトの3つのオプションがあります。Laravel Auth :: check()precheck

たとえば、使用可能なボタンのみを表示する場合は、ユーザーがログインしている場合は、ログアウトボタンを表示したいだけですが、ユーザーがゲストの場合はログインボタンと登録ボタンが必要です。

ここで、ユーザーが認証されていないかどうかを確認するプロバイダを追加しました。ここに私のコードです。

<?php 

namespace App\Providers; 

use View; 
use Auth; 
use Illuminate\Support\ServiceProvider; 

class ShareServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     echo "Provider boot check "; 
     var_dump(Auth::check());   

     if(Auth::check()) 
     { 
      View::share(['loged_in' => true]); 
     } 
     else 
     { 
      View::share(['loged_in' => false]);   
     } 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

ただし、ユーザーは常にゲストとして表示されます。他のコントローラでAuth :: check()を実行すると、すべて正常に動作します。しかし、私はすべてのコントローラでチェックしたくありません。

答えて

0

私はあなたの問題の解決を達成するための選択肢を提供することができます。それはあなたの拘束の範囲内で機能します。

これをサービスプロバイダとして使用するのではなく、ブレードまたはコントローラで呼び出すことができるヘルパー機能として持つことができます。

helpers.phpファイルを作成し、app/Http/helpers.phpとします。

その後、その後、あなたの端末では、autoload配列

"autoload": { 
     "files": [ 
      "app/Http/helpers.php" 
     ], 

composer dump-autoloadの内側にあなたのcomposer.jsonでそれを追加します。あなたは、任意のコントローラ/ブレードの内側に、この方法を使用することができるはず、今

function userLoggedIn(){ 
    $logged_in = false; 
    if(Auth::check()){ 
     $logged_in = true; 
    } 
    return $logged_in; 
} 

は今、あなたのhelpers.phpファイル内の次のメソッドを追加します。

@if(userLoggedIn()) 
    <p>Logged in</p> 
@else 
    <p>Not Logged in</p> 
@endif 

この方法で、あなたは認証を実行することのオーバーヘッドを負担する必要がされていません。すべてのコントローラをチェックインし、あなたはまだどこでもあなたのプロジェクトでそれを必要とそれを使用することができます。

リソース:https://laracasts.com/discuss/channels/general-discussion/best-practices-for-custom-helpers-on-laravel-5?page=1