2015-09-04 6 views
0

Я пытаюсь настроить обработчик ошибок на моем контроллере, чтобы поймать что-нибудь, что может привести к неисправности моей страницы. Например: в этом сценарии я пытаюсь поймать любую ошибку, которая может произойти, когда мой метод вызывает внешний API с плохим параметром, но он, похоже, ничего не делает, кроме как дать мне типичный ClientException in Middleware.php line 69: Client error: 400, который не является тем, что я есть точно нацеливаясь. Любые советы будут высоко оценены или более эффективные способы обработки ошибок в Silex.Silex - мой обработчик ошибок не работает

private function getSIS($url, $session, Application $app) 
{ 
    $message = "You don't have permission to access this!"; 

    if($app['security']->isGranted('ROLE_SUPER_ADMIN')) 
    { 
     $client = new Client(['base_uri' => 'https://***********.ca/api/SIS/']); 
     if (!empty($session)) 
      $response = $client->get($url, ['query' => 'session=' . $session]); 
     else 
      $response = $client->get($url); 
     return $response; 
    } 

    $app->error(function (\Exception $e, $code) { 
     switch($code) { 
      case 404: 
       $message = 'The requested page could not be found'; 
       break; 
      default: 
       $message = 'We are sorry, but something went terribly wrong.'; 
     } 

     return new Response($message); 
    }); 

    return new Response($message); 
} 

ответ

1

Метод $app->error может понадобиться для размещения вне контекста ваших действий контроллера. Я не знаю точно, как вы ваше приложение структурировано, но, возможно, попытайтесь поместить блок право ошибки перед тем $app->run();

$app->error(function (\Exception $e, $code) use ($app) { 
    switch($code) { 
     case 404: 
      $message = 'The requested page could not be found'; 
      break; 
     default: 
      $message = 'We are sorry, but something went terribly wrong.'; 
    } 

    return new Response($message, $code); 
}); 

$app->run(); 
+0

вы намекаете, что блок ошибок будет глобальный обработчик ошибок? –

+0

Любое исключение, исключенное из '$ app-> get',' $ app-> match' и т. Д., Должно приземляться в этом обратном вызове '$ app-> error. Поэтому да, я считаю, что это будет глобальный обработчик ошибок. – ooXei1sh

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