abort_if y abort_unless en Laravel

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.