app/Exceptions/Handler.php en Laravel 8
Laravel solo utilizará un controlador de excepciones a la vez. Este controlador se configura en el archivo app/Exceptions/Handler.php. Cuando Laravel maneja una excepción, invoca el método report en este controlador. Luego, dependiendo de la excepción y de la solicitud, puede invocar el método render o renderForConsole.
Si tienes varios controladores de excepciones (como AdminHandler y MembersHandler) y ambos están en distintos paquetes, Laravel no sabrá cuál usar, ya que está configurado para usar solo uno. No puedes cambiar dinámicamente el controlador de excepciones durante la ejecución de la aplicación.
Por tanto, si tienes diferentes tipos de usuarios y necesitas manejar sus excepciones de manera diferente, deberás realizar esa lógica dentro de un solo controlador de excepciones, tal como se muestra en el ejemplo:
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
if ($request->is('panel') || $request->is('panel/*')) {
return redirect()->guest(route('login'));
}
if ($request->is('member') || $request->is('member/*')) {
return redirect()->guest(route('member.login'));
}
return redirect()->guest(route('login'));
}
En este código, el método unauthenticated() primero verifica si la solicitud actual es para una de las rutas de panel. Si es así, redirige al usuario a la ruta login. Si no es una ruta de panel, luego verifica si la solicitud es para una de las rutas de member. Si es así, redirige al usuario a la ruta member.login. Si la solicitud no coincide con ninguna de estas dos condiciones, entonces redirige al usuario a la ruta login. Esto permite manejar diferentes comportamientos de autenticación para los miembros y los administradores en un único controlador de excepciones.
Laravel sólo utiliza un único controlador de excepciones para manejar todas las excepciones en la aplicación.
Por defecto, este controlador de excepciones es App\Exceptions\Handler. Puedes modificar este controlador para personalizar el manejo de excepciones. Sin embargo, no puedes tener múltiples controladores de excepciones activos al mismo tiempo en una aplicación Laravel.
Esto significa que no puedes tener un AdminsHandler y un MembersHandler activos simultáneamente.
Si necesitas tener un comportamiento diferente para los miembros y los administradores cuando una excepción de autenticación es lanzada, tendrías que implementar la lógica del ejemplo en un único controlador de excepciones.