Php Laravel 5.4方法不允许HttpException
有两个变量的路由问题。 我有一张表格要删除一个项目Php Laravel 5.4方法不允许HttpException,php,laravel,laravel-5,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="Delet
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}/">
{{method_field('DELETE')}}
{{csrf_field()}}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
还有我的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=/*令牌值*/
不知道为什么我在这里有问题!如果有人能透露一些情况,我会很感激的。如果你需要更多的信息,请告诉我
编辑 我在表单中添加了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>
//web.php
路由::post('room/{room}/image/{image}','RoomImagesContoller@delete')
->名称('admin.deleteRoomImages');
//x、 blade.php
{{method_field('DELETE')}
{{csrf_field()}}
但我仍然得到了方法不允许的错误
当我运行php artisan route:list
时,我发现我得到了一个ReflectionError“RoomImagesController不存在”
我会进一步调查的 将method=“post”
作为属性添加到表单中。像这样:
<form action="/admin/room/{{$room->id}}/image/{{$img->id}}" method="post">
如果未提供
方法
属性,则默认情况下通过GET
提交表单DELETE
方法要求通过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>
{{method_field('DELETE')}
{{csrf_field()}}
您可以通过传递method=“POST”
并在表单标记内添加delete-method-hidden字段,通过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>
{{method_field('DELETE')}
{{csrf_field()}}
您可以使用
并在表单中使用helper方法
<form action="{{ route('deleteRoomImages', [
'room' => $room->id,
'image' => $img->id ]) }}/" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
{{method_field('DELETE')}
{{csrf_field()}}
运行composer dump autoload
以清除ReflectionException。
如果复制并修改了类文件,请验证该类的名称是否为RoomImagesController
,然后运行composer dump autoload
。
祝你好运 发生这种情况是因为您向错误的url发出了请求 它必须是
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”
并且您丢失了方法字段,该字段是删除,这就是为什么您会遇到错误尝试使用下面的示例,它会正常工作
<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>
{{method_field('DELETE')}
{{csrf_field()}}
您确定您得到了http://domain.name/admin/room/1/image/1?_method=DELETE&_token=/*tokenValue*/
url?这里有一个粘贴(不包括域)/admin/room/1/image/4?\u method=DELETE&\u token=lfrypuzz8py4eejzekctzgjgm4dkkk6utd3p0jhpk
尝试将{method_字段('DELETE')}
更改为{method字段('DELETE'))}
Ashish,我这样做了
,没有任何更改。请尝试action=“/admin/room/{{{$room->id}}}/image/{{{$img->id}”
remove lastslash
@不必要的金钱尝试使用php-artisan-route:clear
清除缓存的路由。您可能也想使用php-artisan-view:clear
清除缓存的视图。如果这不起作用,那么您可以创建一个简单的路由,只需返回一个字符串即可进行逐步调试。我认为添加正确的方法应该没有问题。我认为这可能是正确的,因为后面的slashAjay,谢谢。这就是原因。我想我已经这样做了,我遵循了答案,其中包含尾随的/。我最好注意我简历上的细节。如果请求被重定向到移动页面,我真的不明白该怎么办。你能进一步解释一下吗?我只想留个条子,我认为不加评论的投票应该修改。此外,@KunsalAjay您可以修改您的答案,以反映OP遇到的问题之一(即,您获得此类答案的原因),并且下次可能会对您给出答案的原因进行一点描述,以使其看起来完整,避免被否决。
<form action="{{ route('deleteRoomImages', [
'room' => $room->id,
'image' => $img->id ]) }}/" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<input class="btn btn-danger" type="submit" value="Delete">
</form>
<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>