删除用户直接用 back () 函数是有问题的.

 public function destroy(User $user)
    {
        $this->authorize('destroy', $user);
        $user->delete();
        session()->flash('success', '删除用户成功');
        return back();

    }

这里直接用 back() 函数是有问题的,如果第 5 页只有一条数据,把这条数据删除后还会回到第 5 页,但是第 5 页其实已经没有数据了,就会变成空白页,如截图所示:
file

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

我也想知道怎么处理这个问题 :flushed:

5年前 评论

@the_bug
可以这样改:
views/users/_user.blade.php 这个文件的 form action 改为

route('users.destroy', [$user->id,'page'=> Request::query('page')])

完整文件为

<li>
    <img src="{{ $user->gravatar() }}" alt="{{ $user->name }}" class="gravatar"/>
    <a href="{{ route('users.show', $user->id) }}" class="username">{{ $user->name }}</a>

    @can('destroy',$user)
        <form action="{{ route('users.destroy', [$user->id,'page'=> Request::query('page')]) }}" method="post">
            {{ csrf_field() }}
            {{ method_field('DELETE') }}
            <button type="submit" class="btn btn-sm btn-danger delete-btn">删除</button>
        </form>
    @endcan

</li>

UsersController 的 destroy 方法改为

    public function destroy(User $user, Request $request)
    {

        $this->authorize('destroy', $user);
        $user->delete();
        $users = User::paginate(8);
        $currentPage = $request->input('page');
        $lastPage = $users->lastPage();
        session()->flash('success', '删除成功!');
        if ($lastPage < $currentPage) {
            return redirect()->route('users.index', ['page' => $lastPage]);
        }

        return back();
    }

效果演示

file

其实就是判断删除后总用户数的最后一页跟删除前的最后一页是不是一样的.
我是这样解决这个问题的,如果你有更好的解决办法,望周知.谢谢.

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!