Acabo de seguir algún tutorial y hasta el momento lo que hago es :
mi App/Exceptions/Handler.php
<?php
...
use Illuminate\Database\Eloquent\ModelNotFoundException;
...
public function render($request, Exception $e)
{
if ($e instanceof ModelNotFoundException){
abort(404);
}
return parent::render($request, $e);
}
y mi UsersController
se parece a esto :
...
public function edit($id)
{
$data = User::findOrFail($id);
$roles = Role::where('title', '!=', 'Super Admin')->get();
return View('admin.user.edit', compact(['data', 'roles']));
}
...
con el código anterior si me visita http://my.url/users/10/edit
puedo obtener NotFoundHttpException in Application.php line 901:
, sí, porque no hay ningún id de 10 en mi expediente, pero con User::find($id);
puedo obtener la vista normal sin datos, ya que no hay id de 10 en mi registro.
Lo que quiero es mostrar por defecto 404, a continuación, redirigir a un sitio o devolver algo si no se encontró el registro con User::findOrFail($id);
? ¿Cómo puedo hacer eso ?
Gracias, cualquier ayuda es apreciada.
ps: .env APP_DEBUG = true
Este hace lo que le pide. No hay necesidad de excepciones.
Su controlador de excepción no es necesario tal y como es. Con respecto a
Illuminate\Database\Eloquent\ModelNotFoundException
:También, estoy bastante seguro de que usted consigue la página de excepción en lugar de 404 debido a que está en modo de depuración.
findOrFail() es igual de find() función con una habilidad extra – a lanza el No Encontrar Excepciones
A veces usted puede desear para lanzar una excepción si un modelo no se encuentra. Esto es particularmente útil en las rutas o los controladores. El findOrFail y firstOrFail métodos de recuperar el primer resultado de la consulta; sin embargo, si no se encuentra, un Iluminar\bases de datos\Elocuente\ModelNotFoundException será lanzado:
Si la excepción no está atrapado, un 404 HTTP de la respuesta se envía automáticamente al usuario. No es necesario escribir explícita cheques para volver 404 respuestas cuando el uso de estos métodos:
No es recomendable, pero Si aún así desea controlar esta excepción a nivel mundial, son los siguientes cambios como por su handle.php
Adición tardía al tema anterior: Si usted quiere manejar la excepción de una API de backend y usted no quiere hacer la comprobación de un resultado vacío en cada método y volver a 400 solicitud incorrecta error de forma individual como este…
Lugar de utilizar
findOrFail
y la captura de la excepción enapp/Exceptions/Handler.php
.Esto se verá así en sus Controladores:
que es mucho más limpio. Considere que usted tiene un montón de Modelos y un montón de Controladores.