Excepciones personalizadas en Laravel
Aprenderemos como podemos crear excepciones personalizadas en Laravel.
Crear una excepción personalizada en Laravel es particularmente útil para poder personalizar las excepciones al monumento de hacer ciertas operaciones según la lógica de negocio de tu aplicación; si creas una orden y tiene un formato invalido, un registro no encontrado, etc; por ejemplo, si no se encuentra un recurso:
app/Exceptions/ResourceNotFoundException.php
namespace App\Exceptions;
use Exception;
class ResourceNotFoundException extends Exception
{
// custom properties or methods...
}
Y para emplearla, usamos el throw para lanzar la excepción:
use App\Models\User;
use App\Exceptions\ResourceNotFoundException;
public function getUserById($id)
{
$user = User::find($id);
if (!$user) {
throw new ResourceNotFoundException("User with ID $id not found.");
}
return $user;
}
Transcripción del vídeo
Lo siguiente que te quería presentar es como puedes manejar las excepciones personalizadas en Laravel, es decir, aquí definimos una sección que la final es una clase como casi todo la vida y por aquí le empleamos aquí colocamos el true para lanzar la sección ahí colocamos el mensaje y eso sería prácticamente todo esto sería bastante útil ya si lo sumas con lo que vimos un poco más adelante que es por por ejemplo controlar las excepciones preguntando por el tipo entonces aquí pudieras tener un mayor control de esto y creo que ya cerramos un poco el ciclo con lo que vimos antes es decir tenemos un mayor control de qué es lo que está sucediendo en la aplicación sin necesidad de estar pasando códigos o evaluando textos sino directamente algo más robusto como viene siendo una excepción una excepción personalizada; claro está, y por lo tanto podemos crear tanto como requiera nuestra aplicación asi que, aclarado un poquito el contexto de todo esto bueno aquí obviamente es una clase puedes definir lo que tú quieras aquí en caso de que sea necesario.
Creamos una clase como la mostrada antes, usualmente con el nombre es más que suficiente pero a hacer clase puedes otra vez definir cualquier cosa ahí vamos allá otra vez; voy a crear una carpeta ya que no la tenemos llamada exceptions y creamos la excepción personalizada como mostramos en el código anterior.
Emplear la excepción personalizada
Definimos la clase y extendemos de excepción y por acá no voy a hacer absolutamente más nada ya que usualmente no hace falta ya con esto tenemos como quien dice la plantilla y faltaría entonces voy a emplearla por ejemplo como lo mostrado en el código anterior.
Para tal fin que es para lanzar la sección en este caso no estamos captura sino lanzándola ya esto es algo de php otra vez el trycatch es para evitar que la aplicación como quien dice coloquialmente explote por aquí Te muestre el error en pantalla ahí lo está capturando y lo están manejando por ejemplo para guardarla en el log:
bootstrap/app.php
use App\Exceptions\InvalidOrderException;
use Illuminate\Http\Request;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (ResourceNotFoundException $e, Request $request) {
// dd(auth()->user());
if ($request->is('api/*')) {
return response()->json(['message' => '404']);
} else {
return response()->view('errors.NotFoundHttpException');
}
});
})->create();
})
como quien dice un ejemplo de esto Claro está ya esto lo emplearías en producción en el sentido de que lo colocas en un log en un log en específico envías un correo todo depende Pero esto es bastante útil por lo comentado suponte que es una orden de pago y tú vendes productos costosos entonces seguramente vas a querer enviar un correo, notificaciones push, etc; puedes hacer un montón de cosas y puedes controlarlo muy efectivamente.
- Andrés Cruz
Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro Laravel 11 con Tailwind Vue 3, introducción a Jetstream Livewire e Inerta desde cero - 2025.

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter