Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени.
На сайте работает guzzle. Вот фрагмент композер.джейсон
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
.....
"guzzlehttp/guzzle": "v6",
"graze/guzzle-jsonrpc": "~3.0",
......
},
Временами есс-на случаются ошибки, во время которых выпрыгивает страшная страница ошибок. Можно конечно отключить дебагер, но я все-же хочу сделать свою кастомную страницу на ошибки. Вот так я их пытаюсь отловить в app/Exceptions/Handler.php. Я делал по аналогии с 404 страницей - отсеил в render нужную ошибку, подсунул нужную вьюху. Но как раз последнее и не работает.
public function render($request, Exception $e)
{
if($e instanceof \GuzzleHttp\Exception\ConnectException){
$HandlerContext = $e->getHandlerContext();
switch ($HandlerContext['errno']) {
case 28:
return response()->view('system.errors.cURL_28_CURLE_OPERATION_TIMEOUT',[],500);
break;
case 7:
return response()->view('system.errors.cURL_7_CURLE_COULDNT_CONNECT',[],500);
break;
}
}
else
return parent::render($request, $e);
}
Собственно, switch благополучно отлавливает ошибки cURL, но вот конструкция return response()->view почему-то не срабатывает. Т.е. если я вставляю
case 28:
echo 'CURLE_OPERATION_TIMEOUT';
return response()->view('system.errors.cURL_28_CURLE_OPERATION_TIMEOUT',[],500);
то echo работает, но я не вижу страницу из response()->view. Т.е. так: иногда она появляется, но при следующих появлениях сообщений об ошибке ее не видно. Но казалось бы, я отловил ошибку, начинаю ее обрабатывать, отправляю вид нужный и что не так, почему не вижу своей заветной кастомной страницы?
Если кому-то непонятно, что это за ошибка, поясню.
Эксепшн рОдится в файле vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php на строке 161. От, здесь немного иначе , добавлено настроек, но в целом то же
$message = sprintf(
'cURL error %s: %s (%s)',
$ctx['errno'],
$ctx['error'],
'see http://curl.haxx.se/libcurl/c/libcurl-errors.html'
);
// Create a connection exception if it was a specific error code.
$error = isset($connectionErrors[$easy->errno])
? new ConnectException($message, $easy->request, null, $ctx)
: new RequestException($message, $easy->request, $easy->response, null, $ctx);
Собственно, констрактор ConnectException из vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php :
public function __construct(
$message,
RequestInterface $request,
\Exception $previous = null,
array $handlerContext = []
) {
parent::__construct($message, $request, null, $previous, $handlerContext);
}
Там в наследуемом RequestException есть функция getHandlerContext, которая собственно, возвращает наш заветный $handlerContext т.е. $ctx из CurlFactory.php, в котором чуть выше набивается данными об ошибке из curl_error и curl_errno. Ну, надеюсь я никого не запутал. Т.о. я надейсь поймать ошибку.
Страницы 1