首页 > 解决方案 > Laravel MethodNotAllowedHttpException on put 动作

问题描述

我从 laravel 开始并尝试在旧版本(5.2)上做一个教程。所以我尝试使用最新版本的 laravel 进行翻译。

我在编辑表单时遇到此错误:

symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 无消息

我在 web.php 上的路线

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::resource('centres', 'CentresController');

我的控制器是 Centrescontroller.php

<?php

namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\http\Controllers\Controller;
use App\centre;

class CentresController extends Controller
{



  public function index()
  {
      $centres = Centre::get();
     return view('centres.index', compact('centres'));
  }

  public function edit($id)
  {
     $centres = Centre::find($id);
    /// dd($centres);
    return view('centres.edit', compact('centres'));
  }

  public function update($id, Request $request)
  {
      return "Utilisateur modifié !";

  }
}

我的带有编辑表单的模板是/views/centres/edit.balde.php

@extends('layouts.app')

@section('content')
<h1>Editer</h1>
{!! Form::open(['url' => route('centres.update', $centres), 'method' => 'PUT' ]) !!}

    {{ method_field('PUT') }}

    {!! Form::text('titre', 'titre',  $centres->titre) !!}

    {!! Form::text('slug', 'slug',  $centres->slug) !!}

    {!! Form::textarea('description', 'description',  $centres->descriptif) !!}

    {!!Form::submit("Envoyer")!!}


{!! Form::close() !!}

@endsection

我尝试在两个部分中添加 put,因为我发现了很多有关此问题的消息,但这并没有解决问题。

我的路线清单很好,centers.update 必须没问题,所以我不明白这个问题:

λ php artisan route:list
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                    | Name             | Action                                                                 | Middleware   |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD  | /                      |                  | Closure                                                                | web          |
|        | GET|HEAD  | api/user               |                  | Closure                                                                | api,auth:api |
|        | POST      | centres                | centres.store    | App\Http\Controllers\CentresController@store                           | web          |
|        | GET|HEAD  | centres                | centres.index    | App\Http\Controllers\CentresController@index                           | web          |
|        | GET|HEAD  | centres/create         | centres.create   | App\Http\Controllers\CentresController@create                          | web          |
|        | PUT|PATCH | centres/{centre}       | centres.update   | App\Http\Controllers\CentresController@update                          | web          |
|        | GET|HEAD  | centres/{centre}       | centres.show     | App\Http\Controllers\CentresController@show                            | web          |
|        | DELETE    | centres/{centre}       | centres.destroy  | App\Http\Controllers\CentresController@destroy                         | web          |
|        | GET|HEAD  | centres/{centre}/edit  | centres.edit     | App\Http\Controllers\CentresController@edit                            | web          |
|        | GET|HEAD  | home                   | home             | App\Http\Controllers\HomeController@index                              | web,auth     |
|        | POST      | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
|        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
|        | POST      | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
|        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
|        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
|        | POST      | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
|        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
|        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |
|        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
+--------+-----------+------------------------+------------------+----------------------------------------------------

有人有想法吗?

标签: laravel

解决方案


我认为

{!! Form::open(['url' => route('centres.update', $centres), 'method' => 'PUT' ]) !!}

应该

 {{ Form::open(['method' => 'put',  'route'=> ['centres.update', $centres], 'class'=>'form']) }}

$centresid 对吗?如果不是,则更$centres改为centres->idForm ( 'route'=> ['centres.update', $centres->id]) 中的内容,这可能是主要原因。


推荐阅读