Presentery by se měly skládat ne dědit

filsedla
Člen | 101
+
0
-

Napadlo to už někoho?

Důvod: mám pod-modul API, který dělá nějakou specifickou funkci, např. se připojuje do druhé databáze.
Zatímco dědičnost presenterů mi dovoluje obalit v potomkovi kód z parenta,

public function startup()
{
	// neco
	parent::startup();
	// neco
}

já bych potřeboval udělat opak: v BasePresenteru modulu obalit kód pod-presenterů, abych nemusel tenhle try-catch psát do všech akcí.

try {
	$this->router->nextPresenter->run();

} catch(ConnectionException) {
	$this->sendJson(... "Connection to the 2nd DB failed")
}

Nejblíž se tomu dostanu asi error presenterem specifickým pro daný modul, ale to není ono.

matopeto
Člen | 395
+
0
-

Neviem presne o co ti ide, ale pokial nechces copypastovat error handling a mat ho globalne tak v base si sprav nieco ako (pseudokod, s preklepami)

<?php

protected handleException(Excetption $ex) {
if ($ex is ConnectionException) {
    $this->sendJson(... "Connection to the 2nd DB failed")
}
// ... dalsie overnia
else throw $ex
}

?>

a potom v potomkovi volaj:

<?php
 try {
       $this->router->nextPresenter->run();
} catch (Exception $ex) {
  $this->handleException($ex);
}

?>