这不一定是CakePHP问题,但我使用的是CakePHP 2.8和PHP 5.6。
我有一个名为save_order的函数,该函数使用try / catch调用另一个名为changePathItemOrder
的函数。该函数调用另一个名为_reorderItemsOnPath
的函数,该函数依次调用另一个名为_moveItemsForwards
的函数。它有几个层次,所以这里有一些图形,可以使我们全都保持跟踪:
sort / order中的try / catch是:
$data['status'] = 'success';
try {
$this->PathRepository->deletePathItemFromPath($milestoneId, $pathId, $accountId);
} catch(Exception $e) {
debug('Caught error');
$data['status'] = 'error';
$data['message'] = $e->getMessage();
}
$this->set(compact('data'));
$this->render('/Elements/json');
如果_moveItemsForwards
中发生错误,我会抛出类似这样的错误:
throw new InternalErrorException('Invalid path item ID: ' . $pathItemId);
问题在于sort_order中的try / catch无法捕获_moveItemsForwards
引发的错误。捕获甚至没有执行,因为调试未显示在结果错误消息中。我刚得到以下错误:-
500 Error! Something broke!
Return to the homepage
Invalid path item ID: 76
处理此错误并将错误消息返回到save_order函数的最佳方法是什么?