Это не обязательно проблема CakePHP, но я использую CakePHP 2.8 и PHP 5.6.
У меня есть функция с именем save_order, которая вызывает другую функцию с именем changePathItemOrder
, используя try / catch.Эта функция вызывает другую функцию с именем _reorderItemsOnPath
, которая, в свою очередь, вызывает другую функцию с именем _moveItemsForwards
.Глубина в несколько уровней, так что вот небольшая графика, чтобы держать нас всех в курсе:
Каскад функций
try / catch в sort_order:
$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);
Проблема в том, что try / catch в sort_order не перехватывает ошибку, выданную _moveItemsForwards
.Перехват не выполняется даже потому, что отладка не отображается в получающемся сообщении об ошибке.Я просто получаю следующее сообщение об ошибке: -
500 Error! Something broke!
Return to the homepage
Invalid path item ID: 76
Как лучше всего обработать эту ошибку и вернуть сообщение об ошибке в функцию save_order?