Laravel 5.4 MethodNotAllowedHttpException

spk*_*kvn 2 php laravel laravel-5

有两个变量的路线有问题.我有一个删除项目的表单.

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/">
    {{method_field('DELETE')}}
    {{csrf_field()}}
    <input class="btn btn-danger" type="submit" value="Delete">
</form>
Run Code Online (Sandbox Code Playgroud)

单击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.*/
    }
}
Run Code Online (Sandbox Code Playgroud)

还有我的RoomImagesController课程

class RoomImagesController extends Controller
{
    /*Other Methods*/
    public function destroy(Room $room, RoomImage $image)
    {
        dd($room, $image);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发送的网址是:

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>
Run Code Online (Sandbox Code Playgroud)

编辑2

命名路线似乎是一个解决方案!

//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>
Run Code Online (Sandbox Code Playgroud)

但我仍然得到MethodNotAllowedError

值得一提的是,当我跑步时php artisan route:list我发现我得到了一个ReflectionError'RoomImagesController不存在'我会进一步调查这个!

Olu*_*kin 5

添加method="post"为表单的属性.像这样:

<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
Run Code Online (Sandbox Code Playgroud)

如果method未提供该属性,则GET默认情况下会提交表单.DELETE方法需要通过提交数据POST.