在laravel中提交表单时,我会得到MethodNotAllowedHttpException
Html文件
<form method="POST" action="/cards/{{$card->id}}/notes">
<input name="_token" type="hidden" value="{{ csrf_token() }}"/>
<textarea name="body" class="form-control"></textarea>
<button type="submit">Add Note</button>
</form>
routes.php文件
Route::post('cards/{card}/notes','NotesController@store');
NotesController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class NotesController extends Controller
{
public function store()
{
return request()->all();
}
}
答案 0 :(得分:4)
请确保您没有路线,例如Route::post
的参数位于您尝试击中的路线前面。
例如:
Route::post('{something}', 'SomethingController@index');
Route::post('cards/{card}/notes', 'NotesController@store');
在这种情况下,无论您尝试向卡路由发送什么内容,它都会始终点击something
路由,因为{something}
拦截cards
作为有效参数并触发SomethingController
。
将something
路线放在卡片路线下方,它应该有效。
答案 1 :(得分:0)
MethodNotAllowedHttpException
,但找到了匹配URI但不匹配方法的路由。
在您的情况下,我想问题是因为路由和控制器之间的URI参数不同。
您可以尝试以下两种方法:
Route::post('cards/notes','NotesController@store');
public function store($card) { return request()->all(); }
答案 2 :(得分:0)
我试图在流明中解决这个错误,我花了很多时间来弄清楚这个问题。 问题出在laravel本身。
有时如果您有另一条路线,例如GET设备/ {变量},则laravel会在第一条路线中停止......
所以您需要做的是将路线POST device
更改为POST device/add