路由注销不支持DELETE方法。支持的方法:POST

问题描述 投票:0回答:1

我想在我的网络项目中使用 CRUD,我导入了初学者工具包 Breeze 来进行 CRUD(在项目创建之后/有点太晚了)

不幸的是,我无法从控制器访问该方法,我总是通过另一个控制器 AuthenticatedSessionController 重定向到注销方法,该控制器调用另一个销毁方法来注销。

在这种情况下,我希望调用配置文件控制器而不是经过身份验证的控制器并应用 CRUD 方法

AuthenticatedSessionController:

 public function logout(Request $request): RedirectResponse
    {

        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }

ProfileController:(应该销毁、编辑等):

public function edit(Request $request): View
    {
        return view('profile.edit', [
            'user' => $request->user(),
        ]);
    }

    /**
     * Update the user's profile information.
     */
    public function update(ProfileUpdateRequest $request): RedirectResponse
    {
        $request->user()->fill($request->validated());

        if ($request->user()->isDirty('email')) {
            $request->user()->email_verified_at = null;
        }

        $request->user()->save();

        return Redirect::route('profile.edit')->with('status', 'profile-updated');
    }


    public function destroy(Request $request): RedirectResponse
    {

        $request->validateWithBag('userDeletion', [
            'password' => ['required', 'current_password'],
        ]);

        $user = $request->user();

        Auth::logout();

        $user->delete();

        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return Redirect::route('/')
            ->with('success', __('messages.user_deleted_successfully'));
    }

我的路线web.php

Route::middleware('auth')->group(function () {

    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
//    dd('124');
//    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');


});
require __DIR__.'/auth.php';

我的路线 auth.php

  Route::post('logout', [AuthenticatedSessionController::class, 'logout'])
                ->name('logout');

    Route::delete('/profile', [AuthenticatedSessionController::class, 'destroyUser'])->name('profile.destroy');

以及我的观点:

 <form action="{{ route('profile.destroy', auth()->user()->name) }}" method="POST">
                        @csrf
                        @method('delete')
                        <button type="submit" class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm inline-flex items-center px-3 py-2.5 text-center mr-2 dark:focus:ring-red-900">Delete</button>
                    </form>
php laravel laravel-blade breeze
1个回答
0
投票

这是因为您在注销中添加了方法 DELETE

 <form action="{{ route('profile.destroy', auth()->user()->name) }}" method="POST">
    @csrf
    <button type="submit" class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm inline-flex items-center px-3 py-2.5 text-center mr-2 dark:focus:ring-red-900">Delete</button>
</form>

where `@method('delete')` is removed
© www.soinside.com 2019 - 2024. All rights reserved.