2016-10-20 8 views
1

私はしばしばCall to a member function method() on nullというFatalErrorExceptionを取得します。これは主に、(ブレードで)長い連鎖文を使用したときに起こります。たとえば、各メソッドを個別にチェックすることなく、リレーショナルチェーンのチェーン全体をチェックする方法は?

$file->owners()->first()->categories()->first()->title 

したがって、ここでカテゴリがnullを返す場合、この例外が発生します。私はそれぞれの方法を一つずつチェックしなければならない。プロセスは、トラフすべてのメソッドとを行く(私は推測する)ので、私はまだ(ここでは「タイトル」)は、最終的なパラメータを取得する前に、これらを使用して例外を取得

!empty($file->owners()->first()->categories()->first()->title) 
!is_null($file->owners()->first()->categories()->first()->title) 
isset($file->owners()->first()->categories()->first()->title) 
count($file->owners()->first()->categories()->first()->title) 

:私のような時にそれらを確認することができません最終的なものに到達する前に例外が発生します。実際にコントローラでは、これはこれらすべてのチェックを行うための手がかりになるかもしれませんが、ブレードではこれは私にとって重要なものではありません。しかも、これはループです。だから私は一度にこのチェックをする方法を探しています。

答えて

1

最初のfirst()コールからnullが返された場合は、メソッドチェインを続行できません。あなたはいつもtry ... catchを使用することができます。

try { 
    $file->owners()->first()->categories()->first()->title 
} catch (\Exception $e) { 
    // do on fail 
} 
1

私はあなたのプロジェクトにView Presenterを使用してお勧めします。余計なロジックをビューから移動して専用のプレゼンタークラスに入れることで、コードをきれいに保つことができます。

この詳細については、laracastsをご覧ください。

関連する問題