laravel - 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 |
+--------+-----------+------------------------+------------------+----------------------------------------------------
有人有想法吗?
解决方案
我认为
{!! Form::open(['url' => route('centres.update', $centres), 'method' => 'PUT' ]) !!}
应该
{{ Form::open(['method' => 'put', 'route'=> ['centres.update', $centres], 'class'=>'form']) }}
$centres
id 对吗?如果不是,则更$centres
改为centres->id
Form ( 'route'=> ['centres.update', $centres->id]
) 中的内容,这可能是主要原因。
推荐阅读
- android - 以编程方式创建布局资源 Kotlin Android
- javascript - 尝试使用 context.application.createDocument 编辑创建的文档时出错
- facebook - Facebook Marketing API 广告集过滤
- javascript - 避免内联 onClick 功能的最佳解决方案是什么?
- mysql - 根据多列选择第二个表中不存在的行
- webpack - Webpack 4 编译的 `.mjs` 依赖导致 `ReferenceError: module is not defined`
- bash - 有没有办法改进从 Windows 上的 Ubuntu 上的 Bash 复制到剪贴板格式?
- jhipster - 在 JHipster 中:创建后如何更改数据库设置?
- grafana - Grafana 5.1.0 中的divideSeriesList
- python - 通过所有记录相同来过滤分组的熊猫数据框