abort_if y abort_unless en Laravel
Estos son dos de mis helpers favoritos, ya que añaden mucha legibilidad a nuestro código y son muy simples de usar.
Por ejemplo, supongamos el siguiente pedazo de código:
public function handle(): void {
if (! Auth::user()->isAdmin()) {
throw new \Exception('Not allowed');
}
// ...
}
Entendible, ¿no?
Sin embargo, este código presenta un problema: el código de error va a ser el 500 en el navegador. Sí, claro. Podemos usar también la clase de la excepción HTTP de Symfony, pero aún y así está lejos de ser óptimo.
Podemos ajustar el código a lo siguiente:
public function handle(): void {
if (! Auth::user()->isAdmin()) {
abort(403); // o abort(403, 'Not allowed');
}
// ...
}
abort
es un helper de Laravel que lanza una excepción HTTP, pasando el código de respuesta y el texto de la excepción (no obligatorio). Al llamar a este helper, el código que venga después no se ejecutará.
Ya conociendo el helper abort
, podemos echar un vistazo rápido a sus dos variantes:
public function handle(): void {
abort_if(! Auth::user()->isAdmin(), 403, 'Not allowed');
// ...
}
Podemos sustituir la sentencia if
al completo por una llamada a abort_if
. Además, para no hacer una negación, podemos:
public function handle(): void {
abort_unless(Auth::user()->isAdmin(), 403, 'Not allowed');
// ...
}
De esta forma, introducimos estos dos helpers de Laravel para hacer nuestro código mucho más legible y, a su vez, gestionar mejor los códigos de respuesta con las excepciones.