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)