2016-12-21 2 views
0

Я использую slim framework 3. Я новичок в этой структуре. Я работаю над поиском ошибок и возвратом пользовательских ошибок и сообщений JSON.Поймать ошибку syntex и настраиваемую отчетность об ошибках

Я использовал этот код, чтобы поймать notFoundHandler ошибку:

$container['notFoundHandler'] = function ($c) { 
    return function ($request, $response) use ($c) { 
     return $c['response'] 
      ->withStatus(404) 
      ->withHeader('Content-Type', 'application/json') 
      ->write('Page not found'); 
    }; 
}; 

Но я могу поймать нормальную ошибку Синтекс. Показывает предупреждение: fwrite() ожидает, что параметр 2 будет строкой, массив указан в X-api \ controllers \ Products.php в строке 42

Вместо этого сообщения я хочу, чтобы моя пользовательская ошибка обрабатывала отчет об ошибках syntex , я использовал это тоже,

$container['phpErrorHandler'] = function ($c) { 
    return function ($request, $response, $exception) use ($c) { 
     //Format of exception to return 
     $data = [ 
      'message' => "hello" 
     ]; 
     return $container->get('response')->withStatus($response->getStatus()) 
      ->withHeader('Content-Type', 'application/json') 
      ->write(json_encode($data)); 
    }; 
}; 

Но не работает для меня.

ответ

0

Обработчик ошибок по умолчанию также может содержать подробную диагностическую информацию об ошибке. Для включения этого вам необходимо установить параметр displayErrorDetails истину:

$configuration = [ 
    'settings' => [ 
     'displayErrorDetails' => true, 
    ], 
]; 
$c = new \Slim\Container($configuration); 
$app = new \Slim\App($c); 

Примечания это не подходит для производственных приложений, так как он может раскрыть некоторые детали, которые Вы хотели бы, чтобы не раскрывать. Вы можете найти еще сообщения от Slim docs.

EDIT

Если вам нужно обрабатывать parseErrors, то вам необходимо определить phpErrorHandler в контейнере, так же, как вы делали определить notFoundHandler.

$container['phpErrorHandler'] = function ($container) { 
    return function ($request, $response, $error) use ($container) { 
     return $container['response'] 
      ->withStatus(500) 
      ->withHeader('Content-Type', 'text/html') 
      ->write('Something went wrong!'); 
    }; 
}; 

Примечание: это будет работать только с PHP7 +, потому что в старых версиях parseErrors не может быть пойманной.

+0

Я уже сделал эту конфигурацию. Но вместо обработчика ошибок по умолчанию, я хочу, чтобы моя обработка ошибок с использованием slim framework. – Vijay

+0

Я обновил ответ. –

+0

Я уже определил phpErrorHandler в своих вопросах. см. мой вопрос – Vijay

0

Я использовал этот короткий код в моем dependencies.php

$container['errorHandler'] = function ($c) { 
    return function ($request, $response) use ($c) { 
      $data = [ 
      'message' => "Syntex error" 
      ];   
     return $c['response'] 
      ->withStatus(200) 
      ->withHeader('Content-Type', 'application/json') 
      ->write(json_encode($data)); 
    }; 
}; 



set_error_handler(function ($severity, $message, $file, $line) { 
    if (!(error_reporting() & $severity)) { 
     // This error code is not included in error_reporting, so ignore it 
     return; 
    } 
    throw new \ErrorException($message, 0, $severity, $file, $line); 
}); 

Теперь его работу для меня.

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