2016-05-10 12 views
0

laravelでACLを設定しました。Laravel - ヌルの場合はメソッドを呼び出し、ヌルの場合はfalseを返します。

function user($user_id = null) 
{ 
    if (!$user_id) return Auth::user(); 
    return User::where('id', $user_id)->first(); 
} 

私は長いAuth::user()入力する必要はありませんので、私はこのヘルパー関数を持っている:私は、次のヘルパーを持っています。

ここに問題があります。私はACLを設定しているので、私のモデルで次のようなことをして、ユーザーがログインしていないときにエラーが発生します。

if (user()->can('edit-blog')) { 
    echo 'you can edit blog!'; 
} 

ユーザーがログインしていない場合、これは誤りです:メンバ関数へ

コールは、()はnull今

に、私はどこでも、次のコードを持つことができます私のサイト。私はほとんどすべてのビューとモデルとコントローラでACLを使用しています。私はエラーを出さないために次のようなことをする必要はありません。

if (user() && user()->can('edit-blog')) { 
    // do stuff 
} 

「null」エラーまたは例外がある場合は、どのようにfalseを返すことができますか?

**私が試してみました**

私はtry/catchを試してみましたが、それは何もしません。

try { 
    if (!$user_id) return Auth::user(); 
    return User::where('id', $user_id)->first(); 
} catch (Exception $ex) { 
    return false; 
} 

のご支援をいただき、ありがとうございます。

+0

を呼び出す前にログインしているかどうかを確認する必要があります。したがって、 'user()'呼び出しの結果を変数に格納し、それをチェックして 'can()'メソッドを呼び出すことができます。 – zerkms

+0

はい、それは私が今やっていることです。私はちょうど呼び出す方法があるかどうか疑問に思っていたし、ユーザーがログインしていない場合は、自動的にfalseを返すが、そうは思わない。ありがとう。 –

+0

それはあなたがやっていることではありません:私は、dbに2回クエリをしないように、コールの結果を変数に格納することを提案しました。 – zerkms

答えて

0

あなたは、ユーザーがあなたが呼び出して確認する必要があることができ

if(Auth::check() && user()->can('edit-post')){ 
    Return true; 
}else{ 
    Return false; 
} 
+0

私はすでにこれをやっています、ありがとう。 –

関連する問題