ADD error headling.
This commit is contained in:
parent
eb88812d89
commit
e3ecda2f3e
@ -3,6 +3,8 @@
|
|||||||
namespace App\Exceptions;
|
namespace App\Exceptions;
|
||||||
|
|
||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
class Handler extends ExceptionHandler
|
||||||
@ -44,5 +46,47 @@ public function register(): void
|
|||||||
$this->reportable(function (Throwable $e) {
|
$this->reportable(function (Throwable $e) {
|
||||||
//
|
//
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// AJAX kérések esetén mindig JSON választ adunk, egyedi referencia kóddal
|
||||||
|
$this->renderable(function (Throwable $e, $request) {
|
||||||
|
if ($request->ajax() || $request->wantsJson()) {
|
||||||
|
return $this->handleAjaxException($e, $request);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleAjaxException(Throwable $e, $request): JsonResponse
|
||||||
|
{
|
||||||
|
// Validációs hibákat nem piszkáljuk – azokat a Laravel alapból kezeli
|
||||||
|
if ($e instanceof \Illuminate\Validation\ValidationException) {
|
||||||
|
return parent::render($request, $e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Egyedi referencia kód generálása
|
||||||
|
$errorRef = 'ERR-' . now()->format('ymdHis') . '-' . strtoupper(Str::random(6));
|
||||||
|
|
||||||
|
// Teljes technikai részlet a logba
|
||||||
|
\Log::error("[$errorRef] Unhandled exception", [
|
||||||
|
'error_ref' => $errorRef,
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
'exception' => get_class($e),
|
||||||
|
'file' => $e->getFile(),
|
||||||
|
'line' => $e->getLine(),
|
||||||
|
'url' => $request->fullUrl(),
|
||||||
|
'method' => $request->method(),
|
||||||
|
'user_id' => auth()->id(),
|
||||||
|
'input' => $request->except($this->dontFlash),
|
||||||
|
'trace' => $e->getTraceAsString(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$statusCode = method_exists($e, 'getStatusCode')
|
||||||
|
? $e->getStatusCode()
|
||||||
|
: 500;
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'error_ref' => $errorRef,
|
||||||
|
'message' => "Váratlan hiba történt. Hivatkozási kód: $errorRef",
|
||||||
|
], $statusCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,9 @@
|
|||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Foundation\Configuration\Exceptions;
|
use Illuminate\Foundation\Configuration\Exceptions;
|
||||||
use Illuminate\Foundation\Configuration\Middleware;
|
use Illuminate\Foundation\Configuration\Middleware;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
return Application::configure(basePath: dirname(__DIR__))
|
return Application::configure(basePath: dirname(__DIR__))
|
||||||
->withRouting(
|
->withRouting(
|
||||||
@ -14,5 +17,42 @@
|
|||||||
//
|
//
|
||||||
})
|
})
|
||||||
->withExceptions(function (Exceptions $exceptions): void {
|
->withExceptions(function (Exceptions $exceptions): void {
|
||||||
//
|
// AJAX kérések esetén mindig JSON választ adunk, egyedi referencia kóddal
|
||||||
|
$exceptions->renderable(function (Throwable $e, Request $request) {
|
||||||
|
if ($request->ajax() || $request->wantsJson()) {
|
||||||
|
// Validációs hibákat nem piszkáljuk – azokat a Laravel alapból kezeli
|
||||||
|
if ($e instanceof ValidationException) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Egyedi referencia kód generálása
|
||||||
|
$errorRef = 'ERR-' . now()->format('ymdHis') . '-' . strtoupper(Str::random(6));
|
||||||
|
|
||||||
|
// Teljes technikai részlet a logba
|
||||||
|
\Log::error("[$errorRef] Unhandled exception", [
|
||||||
|
'error_ref' => $errorRef,
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
'exception' => get_class($e),
|
||||||
|
'file' => $e->getFile(),
|
||||||
|
'line' => $e->getLine(),
|
||||||
|
'url' => $request->fullUrl(),
|
||||||
|
'method' => $request->method(),
|
||||||
|
'user_id' => auth()->id(),
|
||||||
|
'input' => $request->except(['current_password', 'password', 'password_confirmation']),
|
||||||
|
'trace' => $e->getTraceAsString(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$statusCode = method_exists($e, 'getStatusCode')
|
||||||
|
? $e->getStatusCode()
|
||||||
|
: 500;
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'error_ref' => $errorRef,
|
||||||
|
'message' => "Váratlan hiba történt. Hivatkozási kód: $errorRef",
|
||||||
|
], $statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
});
|
||||||
})->create();
|
})->create();
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"/js/app.js": "/js/app.js?id=b2b26ba4c8485e78de1ad23b8c72997d",
|
"/js/app.js": "/js/app.js?id=e8e72c61f1eed7ccaa5bd55f8edc43da",
|
||||||
"/js/admin.js": "/js/admin.js?id=a3f796dee735ea8029b653e812781e63",
|
"/js/admin.js": "/js/admin.js?id=2324b5d3c13edd33c62f910a1d8ef0c2",
|
||||||
"/js/module.js": "/js/module.js?id=9baa3aeb550477277796c6ebeff868c4",
|
"/js/module.js": "/js/module.js?id=9baa3aeb550477277796c6ebeff868c4",
|
||||||
"/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8",
|
"/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8",
|
||||||
"/css/app.css": "/css/app.css?id=11474616a7ef31af1acf43a25d65f4b6",
|
"/css/app.css": "/css/app.css?id=11474616a7ef31af1acf43a25d65f4b6",
|
||||||
|
|||||||
@ -177,7 +177,7 @@ window.SupplierAdmin=function (options,SupplierItem) {
|
|||||||
|
|
||||||
//Opts.onAfterInitViewDetails=root.autofillDetails;
|
//Opts.onAfterInitViewDetails=root.autofillDetails;
|
||||||
Opts.dataTable.orderDirective=[0, 'desc'];
|
Opts.dataTable.orderDirective=[0, 'desc'];
|
||||||
Toast.create("Sikeres rögzítés!", ajaxData.get('name')+" nevű beszálllító elmentve", TOAST_STATUS.SUCCESS,5000);
|
Toast.create({ title: "Sikeres rögzítés!", message: ajaxData.get('name')+" nevű beszálllító elmentve", status: TOAST_STATUS.SUCCESS, timeout: 5000 });
|
||||||
APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);
|
APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -775,7 +775,7 @@ window.SupplierAdmin=function (options,SupplierItem) {
|
|||||||
});
|
});
|
||||||
root.Supplier.contact=newContacts;
|
root.Supplier.contact=newContacts;
|
||||||
root.resetContactTable();
|
root.resetContactTable();
|
||||||
Toast.create("Kapcsolat adatai módosítva!", contactData.name+" nevű kapocsolattartó módosítva", TOAST_STATUS.SUCCESS,5000);
|
Toast.create({ title: "Kapcsolat adatai módosítva!", message: contactData.name+" nevű kapcsolattartó módosítva", status: TOAST_STATUS.SUCCESS, timeout: 5000 });
|
||||||
}
|
}
|
||||||
this.addContact=function (contactData){
|
this.addContact=function (contactData){
|
||||||
/*
|
/*
|
||||||
@ -788,7 +788,7 @@ window.SupplierAdmin=function (options,SupplierItem) {
|
|||||||
$('.contactTable tbody').append(render);
|
$('.contactTable tbody').append(render);
|
||||||
root.bindContactClickAction();
|
root.bindContactClickAction();
|
||||||
Toast.enableTimers(false);
|
Toast.enableTimers(false);
|
||||||
Toast.create("Kapcsolat tartó hozzáadva!", contactData.name+" nevű kapocsolattartó hozzáadva", TOAST_STATUS.SUCCESS,5000);
|
Toast.create({ title: "Kapcsolattartó hozzáadva!", message: contactData.name+" nevű kapcsolattartó hozzáadva", status: TOAST_STATUS.SUCCESS, timeout: 5000 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -185,6 +185,14 @@ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){
|
|||||||
console.error(xhr);
|
console.error(xhr);
|
||||||
console.error(ajaxOptions);
|
console.error(ajaxOptions);
|
||||||
console.error(thrownError);
|
console.error(thrownError);
|
||||||
|
|
||||||
|
// Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz)
|
||||||
|
if (!xhr.responseJSON) {
|
||||||
|
ajaxErrorFieldHandler({'detail': 'Váratlan szerverhiba. Kérjük próbálja újra később.'});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validációs hibák (422) – ezeket részletesen megjelenítjük
|
||||||
if (xhr.responseJSON.errors) {
|
if (xhr.responseJSON.errors) {
|
||||||
console.error("d2---------------");
|
console.error("d2---------------");
|
||||||
if("jsonapi" in xhr.responseJSON){
|
if("jsonapi" in xhr.responseJSON){
|
||||||
@ -192,18 +200,29 @@ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){
|
|||||||
}else{
|
}else{
|
||||||
ajaxErrorFieldHandler(xhr.responseJSON.errors);
|
ajaxErrorFieldHandler(xhr.responseJSON.errors);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}else{
|
// Egyedi referencia kódos hiba (500, stb.)
|
||||||
if(xhr.status==404){
|
else if (xhr.responseJSON.error_ref) {
|
||||||
|
console.error("error_ref: " + xhr.responseJSON.error_ref);
|
||||||
|
Toast.create({
|
||||||
|
title: "Szerverhiba",
|
||||||
|
message: "Váratlan hiba történt a feldolgozás során.<br>" +
|
||||||
|
"<small>Hivatkozási kód: <strong>" + xhr.responseJSON.error_ref + "</strong></small><br>" +
|
||||||
|
"<small>Kérjük, ezt a kódot adja meg a hibajelentésben.</small>",
|
||||||
|
status: TOAST_STATUS.DANGER,
|
||||||
|
timeout: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 404
|
||||||
|
else if (xhr.status == 404) {
|
||||||
console.error("d3---------------");
|
console.error("d3---------------");
|
||||||
ajaxErrorFieldHandler({'detail':'Nincs ilyen elem.'});
|
ajaxErrorFieldHandler({'detail':'Nincs ilyen elem.'});
|
||||||
}else{
|
}
|
||||||
|
// Egyéb ismeretlen hiba
|
||||||
|
else {
|
||||||
console.error("d4---------------");
|
console.error("d4---------------");
|
||||||
ajaxErrorFieldHandler({'detail':'Általános hiba.'});
|
ajaxErrorFieldHandler({'detail':'Általános hiba.'});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
window.ajaxErrorFieldHandlerJsonAPI= function (errors, container) {
|
window.ajaxErrorFieldHandlerJsonAPI= function (errors, container) {
|
||||||
console.error("d6---------------");
|
console.error("d6---------------");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user