2013-03-17 7 views
0

Моя цель получить JSON какZend Framework 2 AbstractRestfulController - Исключения как JSON

{ 
    "meta": { 
    "error_type": "error type", 
    "code": 400, 
    "error_message": "error msg" 
    } 
} 

В случае что-то пошло не так. Я попытался поместить блок catch try как в действие контроллера останова, так и в модель, но я получаю весь стек исключений (я имею в виду с макетом + представление)

Каков правильный путь?

ответ

0

Поймать исключение в действии контроллера.

Вернуть JsonModel от действия, содержащего информацию об исключении:

public function someAction() 
{ 
    try { 
     throw new Exception(); 
    } 
    catch (Exception $e) { 
     return new JsonModel(array(
      'meta' => array(
       'code'   => $e->getCode(), 
       'error_message' => $e->getMessage(), 
       //... 
      ) 
     )); 
    } 
    //... 
} 

Источник: Returning JSON from a ZF2 controller action

0

[Я пытался поставить блок попытаться поймать как в остальных действий контроллер]

Я только что попробовал (хочу, чтобы моя цель стала истинной, но когда только если что-то пойдет не так :))

public function create($data) 
{ 
     try{ 
    $artist = $this->getRequest()->getPost('artist', null); 
     $title = $this->getRequest()->getPost('title', null); 
     $album = new Album(); 
     $album->exchangeArray(array('artist'=>$artist,'title'=>$title)); 
     $id = $this->getAlbumTable()->saveAlbum($album); 
     return $this->get($id); 
    } 
    catch (Exception $e) { 
     return new JsonModel(array( 
       'meta' =>array( 
        'code'=>500, 
        'error-num'=>$e->getCode(), 
        'error-msg'=>$e->getMessage(), 
       ) 
      )); 
     } 

} 

, но как и выше, не работает вместо данных JSON я получаю стек целом исключения по умолчанию с макетом.

+0

Можете ли вы вставить след исключения в сущность? Это выглядит ненормально, и, на мой взгляд, исключение возникает вне блока 'try-catch'. – Ocramius

+0

для запуска исключения. Я установил поле альбома исполнителя как уникальное, чем $ curl -i -H «Accept: application/json» -X POST -d «artist = AC DC2 & title = Dirty Deeds2» http: // localhost/zf2/public/два раза вы можете посмотреть на весь стек http://pastebin.com/uLftaG7s – Whisher

+0

Я вижу, что вижу .../Driver/Pdo/Statement.php: 245 ...... – Whisher

Смежные вопросы