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;
}

Так в чем-же проблема? А проблема в том, что я просто не могу понять, где и как я могу поймать исключение, чтобы обработать его не на уровне контроллера, а на уровне модуля, для всех исключений в целом, ну хотя бы для того, чтобы реализовать:

  1. Логгирование
  2. Выбирать автоматически модель отрисовки (JsonModel or ViewModel)

Если это делать на уровне контроллера - все просто и понятно, но хотелось бы некоторой универсальности, а именно, чтобы можно было ловить исключения по любым ошибкам вообще (хотя бы на уровне одного модуля, а лучше на уровне всего приложения).

Вероятно, мне нужно копать в сторону Module.php в функции onDispatch или, возможно, MvcEvent::EVENT_DISPATCH_ERROR, но что конкрето и где не могу сообразить, а готовых примеров найти так и не удалось.

Подскажите, есть ли лучшие практики в этом вопросе?


Ответы (0 шт):