php - Laravel 5.4 MethodNotAllowedHttpException

标签 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>

单击删除后,我得到了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);
    }
}

我发送到的URL是:
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>


编辑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>

但是我仍然得到MethodNotAllowedError
当我运行php artisan route:list时可能会值得注意,我发现得到了ReflectionError'RoomImagesController不存在'。
我将对此进行进一步调查!

最佳答案

发生这种情况是因为您向错误的网址发出请求

它必须是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> 

关于php - Laravel 5.4 MethodNotAllowedHttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299677/

相关文章:

javascript - Laravel 5.2 PHP 数组到 Javascript 变量

php - Laravel:多个事件的单一监听器

php - 为 octobercms 构建 Eloquent 查询 ownsTo

php - stdClass 类的对象无法转换为字符串

php - 具有无限数量参数的 Laravel 4 路由

mysql - 按删除时间戳排序并返回从特定id开始的记录

php - 无法在 Laravel 中获取 Auth::user->id

php动态访问表单变量

php - MySQL 数据库 : How far to Normalize/Queries VS Join/Unique Index

php - 我如何从另一台电脑访问第二个 laravel 应用程序