Uno de los aspectos que puede ser una pequeña piedra en el zapato es que cuando creamos nuestro fantástico CRUD, con el mejor diseño, mejores validaciones y el mejor funcionamiento en general, cuando decidimos editar un registro que NO sea de la primera página del listado cuando terminamos de editar el registro, el funcionamiento clásico es enviarlo a la página de listado... El problema es que lo enviamos a la página uno del listado y NO a la página en la cual editamos el registro: te voy a presentar un sencillo esquema que puedes emplear en cualquier framework, o inclusive sin necesidad de emplear un framework.
Así que, si empleas Django, CodeIgniter, Flask, o Laravel que es nuestro caso de estudio, puedes emplear esta solución inclusive si empleas Inertia, Livewire o Laravel básico.
El uso del a sesión para guardar la página actual
El truco es siempre guardar en alguna parte, por ejemplo en la sesión cuando estamos en la página de listado; es decir, la página de listado completa con parámetros y todo: en Laravel sería algo como lo siguiente:
//echo request()->fullUrl();
//if(!Str::contains(request()->fullUrl(), ["livewire/message","???"]))
Session::put("url_return",request()->fullUrl());
Por ejemplo, lo puede colocar en el index (o lo debes colocar...) si estás empleando laravel básico con todos los posibles filtros y parámetros de la página.
public function index()
{
$posts = Post::orderBy('created_at', 'desc')->paginate(10);
// select * from posts
return view('dashboard.post.index', ['posts' => $posts]);
}
Con fullUrl() obtenemos la URL full, con TODO incluido los parámetros, y esto lo guardamos en la sesión, un extra seria para livewire o inertia, que al enviar peticiones por detrás de control o internas a este paquete, tienes que filtrar estas ocurrencias y para eso es el condicional que ves en el código anterior.
En la página de edición
Ahora una vez, cuando estemos en la página de edición, editando ese registro de la página 2 o superior, preguntamos si tenemos algo en la sesión, del parámetro que configuramos anteriormente, y si es así, mandamos a nuestro usuario para esa pagina y todo el mundo feliz:
if(session("url_return"))
return redirect(session("url_return"));
//Session::put('url_return', null);
También pudieras limpiar la sesión en alguna parte clave de tu app.
En el caso de Laravel básico, sería la función de update para tal fin:
public function update(StorePostPost $request, Post $post)
{
$post->update($request->validated());
return back()->with('status', 'Post actualizado con éxito');
}
Por lo demás, con este sencillo esquema puedes realizar lo comentado inicialmente: si lo quieres ver paso a paso, puedes ver el video al inicio de esta publicación.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter