我经常得到一个说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)
我仍然通过使用这些来获得异常,因为(我猜)在获得最终参数之前(此处为'标题'),该过程将通过所有方法进行,然后才能进入最后一个异常来了。实际上在控制器中这可能是所有这些检查的指导,但在刀片中,这对我来说并不那么重要。此外,这是一个循环。所以我想看看我怎么能立刻做这个检查。
答案 0 :(得分:1)
如果从第一个first()
调用中获取null,则无法继续方法链接。您始终可以使用try ... catch
:
try {
$file->owners()->first()->categories()->first()->title
} catch (\Exception $e) {
// do on fail
}
答案 1 :(得分:1)
我建议您在项目中使用View Presenter。通过从视图中移除所有额外的逻辑并将其放在专用的演示者类中,它确实可以帮助您保持代码清洁。
观看此laracasts视频了解详情。