Laminas - работа с исключениями(Exception) в MVC шаблоне - лучшие практики, как?
У меня очень простой, на первый взгляд, вопрос, но я сижу и думаю над ним уже несколько недель, и никак не могу реализовать уже какой-то приемлый и красивый вариант. Вероятно, это связано с неправильным пониманием некоторых фундаментальных вещей в Laminas MVC, но которые я нигде не могу найти и прояснить для себя.
Итак, в моем проекте есть модель, которая выглядит так:
My Model:
declare(strict_types=1);
namespace MyModelName\Service;
class MyClass {
public function myFunction()
{
// for example
$check_it = false;
if (true != $check_it) {
throw new \Exception('Oh, thats wrong');
}
}
}
Также, у меня есть контроллер:
My Controller:
class MyController extends AbstractActionController
{
public function indexAction()
{
$my_class = new MyClass();
$view_accept_criteria = [
ViewModel::class => [
'text/html',
'application/xhtml+xml',
],
JsonModel::class => [
'application/json',
'application/javascript',
],
],
$view = $this->acceptableViewModelSelector($view_accept_criteria);
try {
$my_class->myFunction();
} catch (\Exception $e) {
$view->setVariables([
"success" => false,
"errorMessage" => $e->getMessage(),
}
return $view;
}
Так в чем-же проблема? А проблема в том, что я просто не могу понять, где и как я могу поймать исключение, чтобы обработать его не на уровне контроллера, а на уровне модуля, для всех исключений в целом, ну хотя бы для того, чтобы реализовать:
- Логгирование
- Выбирать автоматически модель отрисовки (JsonModel or ViewModel)
Если это делать на уровне контроллера - все просто и понятно, но хотелось бы некоторой универсальности, а именно, чтобы можно было ловить исключения по любым ошибкам вообще (хотя бы на уровне одного модуля, а лучше на уровне всего приложения).
Вероятно, мне нужно копать в сторону Module.php в функции onDispatch или, возможно, MvcEvent::EVENT_DISPATCH_ERROR, но что конкрето и где не могу сообразить, а готовых примеров найти так и не удалось.
Подскажите, есть ли лучшие практики в этом вопросе?