有两个变量的路线出现问题。 我有一个删除项目的表单。
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/">
{{method_field('DELETE')}}
{{csrf_field()}}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
单击Delete后,我得到一个MethodNotAllowedHttpException。
这是我的路线档案。
//authenticated users only
Route::group(['middleware' => 'auth'], function ()
{
Route::prefix('admin')->group(function ()
{
/*Some other routes*/
//Matches "/admin/room/{room}/image[s]?"
Route::get('room/{room}/image', 'RoomImagesController@index')
->name('admin.roomimages');
Route::get('room/{room}/image/create','RoomImagesController@create');
Route::post('room/{room}/image','RoomImagesController@store');
Route::delete('room/{room}/image/{image}','RoomImagesContoller@destroy');
//Matches the "/admin/room[s]?" URL
Route::get('/rooms', 'AdminController@rooms');
Route::get('/room/create', 'RoomController@create');
Route::get('/room/{room}', 'RoomController@edit');
Route::post('/room/search','RoomController@search');
Route::post('/room/store', 'RoomController@store');
Route::post('/room/{room}','RoomController@update');
Route::delete('/room/{room}','RoomController@destroy');
/*some more routes.*/
}
}
我的RoomImagesController类
class RoomImagesController extends Controller
{
/*Other Methods*/
public function destroy(Room $room, RoomImage $image)
{
dd($room, $image);
}
}
我发送的网址是:
http://domain.name/admin/room/1/image/1?_method=DELETE&_token=/*tokenValue*/
不确定我为什么在这里遇到问题!如果有人可以发光,我会很感激。如果您需要更多信息,请与我们联系。
我在表单中添加了method =“post”,但错误相同。这是网页上的原始粘贴。
<form method="post" action="/admin/room/1/image/4/">
<input name="_method" value="DELETE" type="hidden">
<input name="_token" value="lFrYPuzz8pY4EEJZEKCtZgjGM4dkk6uTD3p0jhpK" type="hidden">
<input class="btn btn-danger" value="Delete" type="submit">
</form>
命名路线似乎是一种解决方案!
//web.php
Route::post('room/{room}/image/{image}','RoomImagesContoller@delete')
->name('admin.deleteRoomImages');
//x.blade.php
<form action="{{ route('admin.deleteRoomImages', [
'room' => $room->id,
'image' => $img->id ]) }}/"
method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
但我仍然得到MethodNotAllowedError
值得注意的是,当我跑php artisan route:list
时,我发现我得到了一个ReflectionError'RoomImagesController不存在'
我会进一步调查这个!
答案 0 :(得分:5)
将method="post"
作为属性添加到表单中。像这样:
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
如果未提供method
属性,则默认情况下会通过GET
提交表单。 DELETE
方法要求通过POST
提交数据。
答案 1 :(得分:3)
这种情况正在发生,因为您正在向错误的网址发出请求
必须是action="/admin/room/{{$room->id}}/image/{{$img->id}}"
而不是action="/admin/room/{{$room->id}}/image/{{$img->id}}/"
为什么会发生这样的情况?您向action="/admin/room/1/image/4/"
提出的请求正在显示移至action="/admin/room/1/image/4"
并且您丢失了DELETE
方法字段,这就是您收到错误的原因尝试使用下面的示例,它会正常工作。
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
{{method_field('DELETE')}}
{{csrf_field()}}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
答案 2 :(得分:1)
将表单上的方法属性设置为POST 你有
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/" method="POST">
{{method_field('DELETE')}}
{{csrf_field()}}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
答案 3 :(得分:1)
您可以使用Named Routes
obj = UserMF(request.POST)
if obj.is_valid():
obj.save()
xxx = obj.id
并在表单
中使用route()
帮助器方法
Route::delete('room/{room}/image/{image}',
'RoomImagesContoller@destroy')->name('deleteRoomImages');
答案 4 :(得分:0)
您可以通过POST
方法传递method="POST"
并在表单标记内添加删除方法隐藏字段
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/" method="post">
{{method_field('DELETE')}}
{{csrf_field()}}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
答案 5 :(得分:-1)
运行composer dump-autoload
以清除ReflectionException。
如果您复制了类文件并对其进行了修改,请验证该类的名称是否为RoomImagesController
并运行composer dump-autoload
。
祝你好运!