1

因此,我和我的朋友正在开发用于用户管理的管理员视图。我希望这个视图能够通过单击按钮来删除用户。

用户列表本身如下所示:

@section('main')
    @csrf
    <ul class="collapsible">
        @foreach($users as $user)
            <li method="POST" action="delete">
                <div class="collapsible-header">
                    <i class="material-icons">face</i>{{$user->fname}} {{$user->lname}}
                </div>
                <div class="collapsible-body" id="{{$user->id}}">
                    <p>Adresse: {{$user->address1}}, {{$user->postalcode}} {{$user->city}}</p>
                    <p>Land: {{$user->country}}</p>
                    <p>E-Mail: {{$user->email}}</p>
                    <span>Beigetreten: {{$user->created_at}}</span>
                    <br>
                    <a class="btn red waves-effect waves-light user-delete-button" href="" 
                       id="user-delete-button" data-userid="{{$user->id}}">
                        <i class="material-icons">delete</i>
                    </a>
                </div>
            </li>
        @endforeach
    </ul>
@endsection

扩展的dashboard.blade.php 模板中的脚本如下:


    <script>
        $(document).ready(function(){
            $('.collapsible').collapsible();
            $('.user-delete-button').click(function (e){
                $.ajax({
                    url: '{{route('deleteuser')}}',
                    data: {"userid": $(this).data("userid")},
                    type: 'post',
                    success: function(data)
                    {
                        console.log('deleted');
                    }
                });
            });
        });
    </script>

用户控制器:

class UserController extends Controller
{
    public static function destroy($id) {
        $user = \App\Models\User::findOrFail($id);
        $user->delete();

        return redirect('/userlist');
    }
    //
}

最后是 web.php 中的 Route:

Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');

因此,现在每当我尝试删除单击按钮的用户时,我都会在控制台中收到“500 内部服务器错误”。

在这一点上,我不仅不知道我应该做什么来完成这项工作。我唯一想要的是删除一条记录并通过单击一个按钮刷新数据库。但目前我没有尝试过到目前为止。

我希望你能帮助我。提前致谢!

4

3 回答 3

1

您的请求中必须需要头文件,因此请使用此类型:'post', header

于 2020-09-26T18:51:24.010 回答
0

选项 1:将 {id} 参数添加到您的路线。

Route::post('/deleteuser/{userid}', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;

class UserController extends Controller
{
    public function destroy($userid) {
        $user = User::findOrFail($userid);
        $user->delete();

        return redirect('/userlist');
    }
    
}

选项 2:在您的路由和控制器操作中使用路由模型绑定:

Route::post('/deleteuser/{user}', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;

class UserController extends Controller
{
    public function destroy(User $user) {
        $user->delete();

        return redirect('/userlist');
    }
    
}

选项 3:使用 Request 对象检索查询字符串

Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function destroy(Request $request) {
        $user = User::findOrFail($request->query('userid', null));
        $user->delete();

        return redirect('/userlist');
    }
    
}
于 2020-09-26T18:29:59.023 回答
0

也许你得到了 500 错误,因为你的控制器类没有找到。您需要使用完整的命名空间。修改您的代码如下:

路线:

Route::post('/deleteuser', [App\Http\Controllers\UserController::class, 'destroy'])->name('deleteuser');

控制器:

class UserController extends Controller
{
    public static function destroy(Request $Request) {
        $id = $Request->input('userid');
        $user = \App\Models\User::findOrFail($id);
        $user->delete();

        return redirect('/userlist');
    }
    
}

注意:对于POST请求,您需要csrf token通过您的 ajax 数据发送

data: {
   "_token": "{{ csrf_token() }}",
   "userid": $(this).data("userid")
}

或者您可以像这样添加标头参数:

$.ajax({
    url: '{{route('deleteuser')}}',
    data: {"userid": $(this).data("userid")},
    type: 'post',
    headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
    success: function(data)
    {
        console.log('deleted');
    }
});

希望这会奏效!

于 2020-09-26T18:13:54.857 回答