Presentery by se měly skládat ne dědit
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- filsedla
- Člen | 101
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
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);
}
?>