JsonResponse – vyjimky na jednom místě
- motorcb
- Člen | 552
Zdravím.
V aplikaci mám API část ve které generuji JSON výstup (jsou to desítky
obrazovek – actions):
public actionGetData()
{
try{
$data = $this->user->getData();
if($data === NULL ){
new threw("no data to view");
}
$json = array(
"succes" => true,
"id" => $data->id,
"name" => $data->name
);
} catch (Exception $e) {
$json = array(
"succes" => false,
"message" => $e->getMessage()
);
}
$this->sendResponse( new Nette\Application\Responses\JsonResponse( $json) );
}
Vadí mi opakování kódu (v každém action pro generování json výstupu) try{ }catch(), kde v bloku catch je VŽDY následující kód:
} catch (Exception $e) {
$json = array(
"succes" => false,
"message" => $e->getMessage()
);
}
Co by ste doporučili za metodu pro to abych nemusel tupě psát try{ }catch(), ale abych měl try{ }catch() definovanou na jednom místě?
Děkuji za rady
- enumag
- Člen | 2118
Zřejmě Presenter::tryCall s tím že bych metody které vyžadují toto chování označoval pomocí anotace.
Taky by se dalo použít Kdyby/Aop.
Anebo možná vůbec nejlepší by bylo řešit to až v ErrorPresenteru. Ono totiž bude lepší vrátit i jiný http code.
Editoval enumag (26. 10. 2013 0:24)
- motorcb
- Člen | 552
@enumag:
>
Zřejmě Presenter::tryCall s tím že bych metody které vyžadují toto chování označoval pomocí anotace.
Kde zjistím nějaké blizší informace o Presenter::tryCall ?
Anebo možná vůbec nejlepší by bylo řešit to až v ErrorPresenteru. Ono totiž bude lepší vrátit i jiný http code.
Pokusil jsem se o odchycení v presenteru a pohořel jsem :-(
MujPresenter:
public function actionJsonOptions()
{
throw new \Exception( "Chce se mi" );
}
ErrorPresenter:
public function renderDefault( $exception )
{
dump( $exception );
exit();
...
Muj dump se vubec nezavola ale rovnou je zavolana cervena ladenka, ktera vypise hlaseni o throw new \Exception( „Chce se mi“ );
Editoval motorcb (18. 11. 2013 21:10)
- Jan Suchánek
- Člen | 404
@motorcb: musíš mít catchExceptions: true v config.neon, pokud chceš zobrazovat ErrorPresenter, jinak se ti zcela správně zobrazí laděnka.
Editoval jenicek (30. 10. 2013 16:00)