【问题标题】:Laravel 8: The GET method is not supported for this route. Supported methods: POSTLaravel 8:此路由不支持 GET 方法。支持的方法:POST
【发布时间】:2021-08-05 23:12:13
【问题描述】:

我正在使用 Laravel 8 开发我的项目,并且我已经构建了这个表单来验证令牌:

<div class="card-body">
    <form action="{{ route('profile.2fa.phone') }}" method="POST">
        @csrf

        <div class="form-group">
            <label for="token" class="col-form-label">Token</label>
            <input type="text" class="form-control @error('token') is-invalid @enderror" name="token" placeholder="enter your token">
            @error('token')
                <span class="invalid-feedback">
                <strong>{{ $message }}</strong>
            </span>
            @enderror
        </div>
        <div class="form-group">
            <button class="btn btn-primary">Validate token</button>
        </div>
    </form>
</div>

然后在web.php 我有这些路线:

Route::get('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'getPhoneVerify']);

Route::post('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'postPhoneVerify'])->name('profile.2fa.phone');

但是现在当我添加令牌并按下 Validate Token 按钮时,我得到了这个错误:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 GET 方法。支持的方法: 发布。

那么这里出了什么问题?我该如何解决这个问题?

非常感谢你们的任何想法或建议......

提前致谢。


以下是所有路线:

Route::get('/', function () {
    return view('welcome');
});

Route::prefix('admin')->middleware(['auth', 'verified'])->group(function() {
    Route::get('/', function () {
        return view('admin.index');
    });

    Route::resource('users' , App\Http\Controllers\Admin\AdminUserController::class)->middleware('admin');

    Route::get('/settings', [App\Http\Controllers\Admin\AdminSettingsController::class, 'index'])->name('profile');

    Route::post('/settings/twofactor' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'postManageTwoFactor'])->name('profile.2fa.manage');

    Route::get('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'getPhoneVerify']);
    Route::post('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'postPhoneVerify'])->name('profile.2fa.phone');

    Route::get('/auth/token' ,[App\Http\Controllers\Auth\AuthTokenController::class, 'getToken'])->name('2fa.token');
    Route::post('/auth/token' ,[App\Http\Controllers\Auth\AuthTokenController::class, 'postToken']);
});

Auth::routes(['verify' => true]);

Route::get('/auth/google', [App\Http\Controllers\Auth\GoogleAuthController::class, 'redirect'])->name('auth.google');
Route::get('/auth/google/callback', [App\Http\Controllers\Auth\GoogleAuthController::class, 'result']);

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

【问题讨论】:

  • 不会是{{ admin('admin.profile.2fa.phone') }}

标签: php laravel laravel-8


【解决方案1】:

如果你有/users/posts//users/posts/create/users/posts/edit这样的路由,那么创建和编辑路由应该写在/users/posts之前以避免路由冲突问题。

在您的路线web.php 中,更改以下路线顺序:

Route::get('/', function () {
    return view('welcome');
});

Route::prefix('admin')->middleware(['auth', 'verified'])->group(function() {
    Route::get('/', function () {
        return view('admin.index');
    });

    Route::resource('users' , App\Http\Controllers\Admin\AdminUserController::class)->middleware('admin');

    Route::get('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'getPhoneVerify']);
    Route::post('/settings/twofactor/phone' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'postPhoneVerify'])->name('profile.2fa.phone');

    Route::post('/settings/twofactor' , [App\Http\Controllers\Admin\AdminSettingsController::class, 'postManageTwoFactor'])->name('profile.2fa.manage');

    Route::get('/settings', [App\Http\Controllers\Admin\AdminSettingsController::class, 'index'])->name('profile');

    Route::get('/auth/token' ,[App\Http\Controllers\Auth\AuthTokenController::class, 'getToken'])->name('2fa.token');
    Route::post('/auth/token' ,[App\Http\Controllers\Auth\AuthTokenController::class, 'postToken']);
});

Auth::routes(['verify' => true]);

Route::get('/auth/google/callback', [App\Http\Controllers\Auth\GoogleAuthController::class, 'result']);

Route::get('/auth/google', [App\Http\Controllers\Auth\GoogleAuthController::class, 'redirect'])->name('auth.google');

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

【讨论】:

  • 感谢您的回答,但我仍然收到错误!
  • 尝试运行这个:php artisan optimize:clear
  • 仍然出现错误:此路由不支持 GET 方法。支持的方法:POST。 :(
  • 显示所有路线php artisan route:list您可以在问题中附上
  • 我刚刚添加了问题的所有路线,请检查一下
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 2021-10-07
  • 2021-05-08
  • 2021-04-11
  • 2020-06-05
  • 2020-03-21
  • 2020-04-19
相关资源
最近更新 更多